7
votes

Tailleof () appliqué à la structure et à la variable

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));


2 commentaires

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 expressions renvoient la même valeur. Notez que le second ne nécessite pas de parenthèses; Taille de est un opérateur, pas une fonction. Mais % u nécessite un argument de type non signé INT , pas Taille_t . Ecrivez ceci: printf ("% zu% zu \ n", tailleOf (struct foo), taille de f); ou ceci: printf ("% LU% LU \ N", (non signé long) taille de (struct foo), (non signé long) taille de f); . % zu est une fonctionnalité spécifique au C99; PRINTF MIGNT de votre système ne le supporte pas.


4 Réponses :


6
votes

Les deux volontés et devraient effectivement renvoyer la même valeur.

de msdn: p>

la taille de l'opérateur fort>

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 )


0 commentaires

1
votes

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.

C'est généralement une bonne pratique d'utiliser la variable dans Tailleof comme vous pouvez modifier ultérieurement le type et que la taille peut ainsi changer également.


0 commentaires

0
votes

En général, il est préférable de l'appliquer à la variable. Il restera alors correct si le type de variable change.


1 commentaires

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. .



5
votes

Tailleof fonctionne avec types et expressions . Lorsque vous l'appliquez à un type, le () fait partie de Tailleof Syntaxe: Tailleof (type) . Lorsque vous l'appliquez à une expression () ne faisant pas partie de Tailleof Syntaxe: Tailleof Expression . .

Votre deuxième Taille de n'est pas vraiment "appliquée à une variable". Il est appliqué à une expression (f) . Cette expression consiste en une seule variable F enfermé dans une paire redondante de () . Vous pouvez également faire sans cette paire redondante de () et utilisez juste taille de f .

Lorsque tailleOf 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 sont garanties pour évaluer à la même valeur.

En fait, une bonne pratique de programmation consiste à éviter Tailleof (type) autant que possible, c'est-à-dire que vous préférez utiliser Taille de l'expression . 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.


0 commentaires