Maison >développement back-end >C++ >Pourquoi `sizeof(void)` n'est-il pas valide en C, mais est évalué à 1 dans GCC ?

Pourquoi `sizeof(void)` n'est-il pas valide en C, mais est évalué à 1 dans GCC ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-16 12:26:03756parcourir

Why is `sizeof(void)` invalid in C, but evaluates to 1 in GCC?

Comprendre la taille du vide

En programmation C, le mot clé void signifie un type de données qui n'a pas de taille. Cette propriété particulière le rend inéligible aux déclarations de variables ou aux tâches d'allocation de mémoire.

Erreur de compilation : allocation de pointeur vide

L'extrait de code que vous avez fourni :

void *p = malloc(sizeof(void));

entraînerait une erreur de compilation car sizeof(void) est une expression invalide en C. Le type void ne contient aucune information de taille, rendant cette opération indéfinie et donc rejetée par le compilateur.

Sizeof (void) dans GCC : une exception

Étonnamment, l'expression sizeof(void) est compilée dans le compilateur GNU C (GCC). Il est évalué à 1, indiquant un seul octet de mémoire. Cependant, ce comportement n'est pas standard et varie selon les différents compilateurs et architectures.

Incrémentation du pointeur avec pointeur vide

Votre question sur l'incrémentation de p avec p soulève un concept intéressant. Puisque void n’a pas de taille, l’opération p n’a plus de sens. Le pointeur p ne pointe vers aucun type de données ou valeur spécifique, donc l'incrémenter n'aurait aucun effet sur sa valeur.

En résumé, void en C est un type de données sans taille et ne peut pas être utilisé pour la mémoire allocation ou déclarations de variables. L'expression sizeof(void) n'est généralement pas valide, mais peut se comporter différemment dans des compilateurs spécifiques comme GCC. En raison de son manque de taille, tenter d'incrémenter un pointeur vide avec p n'a aucun résultat significatif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn