2010-07-28 4 views
4

Possible en double:
What is the size of void?sizeof (void) est égal à 1 en C?

Salut à tous! J'utilise gcc pour compiler mes programmes C, je viens de découvrir accidentellement que la taille de (void) est de 1 octet en C.

Y at-il une explication à cela? J'ai toujours pensé que c'était ZERO (s'il ne stocke vraiment rien)!

Merci!

+1

'void' n'a pas de taille car' void' est un type incomplet. Vous ne pouvez pas prendre le 'sizeof' d'un type incomplet. – GManNickG

+0

Si j'essaie de créer une question SO avec ce titre, j'aurai bientôt beaucoup de "questions connexes" autour de ce point ... – pascal

Répondre

0

En général, vous ne demandez pas sizeof(void) puisque vous n'utilisez void que le type. Je suppose que le comportement que vous expérimentez dépend du compilateur spécifique. Sur mon gcc il renvoie aussi 1.

6

Ceci est une extension non standard de gcc, mais a une justification. Lorsque vous faites de l'arithmétique de pointeur ajouter ou supprimer une unité signifie ajouter ou supprimer l'objet pointé à la taille. Ainsi, la définition de sizeof(void) comme 1 permet de définir void* comme un pointeur vers un octet (adresse de mémoire non typée). Sinon, vous auriez des comportements surprenants en utilisant l'arithmétique du pointeur comme p+1 == p lorsque p est void*.

La méthode standard serait d'utiliser `char * pour ce genre de but (pointeur vers octet).

Questions connexes