Pourquoi préférer sizeof (element) à sizeof (TYPE) pour calculer le nombre d'éléments dans un tableau?

15

Je lis "la programmation C de King KN" et j'ai trouvé la déclaration suivante:

Nous avons discuté de l'utilisation de l'expression sizeof(a)/sizeof(a[0])pour calculer le nombre d'éléments dans un tableau. L'expression sizeof(a)/sizeof(t), où t est le type des éléments de a, fonctionnerait également, mais elle est considérée comme une technique inférieure.

Pourquoi est-il considéré comme une technique inférieure?

Higgs
la source
8
avez-vous pensé à ce qui se passerait si le programmeur modifiait le type d'éléments dans un? à un type ayant une taille différente de t. La première expression sera toujours correcte, tandis que la seconde se cassera
moucher
1
@gnat: Vous devriez en faire une réponse.
Martin York

Réponses:

26

sizeof(a)/sizeof(t)code explicitement le type dans l'expression. Vous avez maintenant le type spécifié dans plusieurs emplacements, sans prise en charge du compilateur pour vous assurer que vous utilisez le même type. Donc, si vous changez le type de base du tableau, mais pas dans l'expression de comptage (complètement séparée), bingo: votre code compilera très bien, mais le nombre d'éléments sera erroné. Si vous avez de la chance, votre programme se bloquera, mais sinon, il fonctionnera presque complètement correctement, mais de temps en temps, il se comportera de manière totalement bizarre.

sizeof(a)/sizeof(a[0])est garanti correct, ne nécessitant que le nom du tableau. Changez le type et vous allez bien; changez le nom du tableau et le compilateur se plaindra. Aucune réflexion requise: nous aimons ce genre de programmation.

Daniel Griscom
la source
Eh bien, je préfère vraiment sizeof a/sizeof*a, même si ce n'est pas vraiment une différence substantielle.
Déduplicateur