Considérez l'extrait suivant:
struct foo { int a; int b; int c; }; struct foo f; printf("%u, %u\n", sizeof(struct foo), sizeof(f));
4 Réponses :
Les deux volontés et devraient effectivement renvoyer la même valeur.
de msdn: p>
La taille de l'opérateur donne la quantité de stockage, en octets, requis pour stocker un objet du type de l'opérande. Cet opérateur vous permet d'éviter de spécifier des tailles de données dépendantes de la machine dans vos programmes. P> sizeof unary-expression
sizeof ( type-name )
Ceci est comme prévu, c'est-à-dire que les deux renvoient la même valeur. Cette valeur est calculée au moment de la compilation. P>
C'est généralement une bonne pratique d'utiliser la variable dans Tailleof code> comme vous pouvez modifier ultérieurement le type et que la taille peut ainsi changer également. P>
En général, il est préférable de l'appliquer à la variable. Il restera alors correct si le type de variable change. p>
L'inconvénient de cette façon est que si vous modifiez le type de la variable de «STORT STORT» à «Pointeur à la structure», la taille de la variable (variable) deviendra 4 (ou 8 selon l'architecture) et le compilateur l'acceptera avec heureusement sans vous avertir. .
Votre deuxième Lorsque En fait, une bonne pratique de programmation consiste à éviter Tailleof code> fonctionne avec types em> et expressions em>. Lorsque vous l'appliquez à un type, le
() code> fait partie de
Tailleof code> Syntaxe:
Tailleof (type) code>. Lorsque vous l'appliquez à une expression
() code> ne faisant pas partie de
Tailleof code> Syntaxe:
Tailleof Expression code>. P>.
Taille de code> n'est pas vraiment "appliquée à une variable". Il est appliqué à une expression
(f) code>. Cette expression consiste en une seule variable
F code> enfermé dans une paire redondante de
() code>. Vous pouvez également faire sans cette paire redondante de
() code> et utilisez juste
taille de f code>. P>
tailleOf code> est appliqué à une expression, il renvoie la taille du résultat d'expression (c'est-à-dire la taille du type que l'expression a). Dans votre exemple, les deux applications de
taille de code> sont garanties pour évaluer à la même valeur. P>
Tailleof (type) code> autant que possible, c'est-à-dire que vous préférez utiliser
Taille de l'expression code>. Cela rend votre code plus indépendant de type, qui est toujours une bonne chose. Les noms de type appartiennent à des déclarations et nulle part ailleurs. P>
Avez-vous essayé Googling "Tailleof appliquée à la variable"? Les deux premiers résultats (dont l'un tire de Stackoverflow) auraient pu répondre à votre question.
Oui, les deux
taille de code> expressions renvoient la même valeur. Notez que le second ne nécessite pas de parenthèses;
Taille de code> est un opérateur, pas une fonction. Mais
% u code> nécessite un argument de type
non signé INT code>, pas
Taille_t code>. Ecrivez ceci:
printf ("% zu% zu \ n", tailleOf (struct foo), taille de f); code> ou ceci:
printf ("% LU% LU \ N", (non signé long) taille de (struct foo), (non signé long) taille de f); code>.
% zu code> est une fonctionnalité spécifique au C99;
PRINTF CODE> MIGNT de votre système ne le supporte pas.