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'expressionsizeof(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?
Réponses:
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.la source
sizeof a/sizeof*a
, même si ce n'est pas vraiment une différence substantielle.