87 votes

Quelle est la taille de vide?

Et quelle serait cette déclaration de rendement?

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


Edit: Une extension de la question.

Si sizeof(void) retourne 1 dans le compilateur GCC, 1 octet de la mémoire est allouée et le pointeur p pointe vers ce octets et serait p++ être incrémenté à 0x2346? Supposons que p est 0x2345. Je parle de p et non *p.

70voto

reko_t Points 22121

nul n'a pas de taille, ce serait une erreur de compilation. Pour la même raison, vous ne pouvez pas faire quelque chose comme:

void n;

EDIT. À ma grande surprise, en faisant sizeof(void) ne compile en C:

$ echo 'int main() { printf("%d", sizeof(void)); }' | gcc -xc -w - && ./a.out 
1

Toutefois, en C++ il n'est pas:

$ echo 'int main() { printf("%d", sizeof(void)); }' | gcc -xc++ -w - && ./a.out 
<stdin>: In function 'int main()':
<stdin>:1: error: invalid application of 'sizeof' to a void type
<stdin>:1: error: 'printf' was not declared in this scope

46voto

hrnt Points 5835

Si vous utilisez GCC et vous n'êtes pas en utilisant des indicateurs de compilation que supprimer compilateur spécifique extensions, sizeof(void) est de 1. GCC a une extension non standard qui le fait.

En général, void est un type incomplète, et vous ne pouvez pas utiliser sizeof incomplète types.

18voto

Konrad Rudolph Points 231505

Bien qu' void peut rester sur place pour un type, il ne peut effectivement contenir une valeur. Par conséquent, il n'a pas de taille en mémoire. L'obtention de la taille d'un void n'est pas défini.

Un void pointeur est tout simplement un langage de construire du sens à un pointeur non typé de la mémoire.

12voto

pmg Points 52636

Prendre la taille de void est un GCC extension.

6voto

Aleksei Potov Points 829

sizeof() ne peut pas être appliqué à incomplète types. Et void est de type incomplète ne peut pas être terminée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X