Perché preferire sizeof (element) piuttosto che sizeof (TYPE) per calcolare il numero di elementi in un array?


15

Sto leggendo "Programmazione C di King KN" e ho trovato la seguente dichiarazione:

Abbiamo discusso sull'uso dell'espressione sizeof(a)/sizeof(a[0])per calcolare il numero di elementi in un array. L'espressione sizeof(a)/sizeof(t), dove t è il tipo di elementi di a, funzionerebbe anche, ma è considerata una tecnica inferiore.

Perché è considerata una tecnica inferiore?


8
hai considerato cosa accadrebbe se il programmatore cambia il tipo di elementi in un? a un tipo di dimensioni diverse da t. La prima espressione sarà ancora a posto, mentre la seconda si spezzerà
moscerino il

1
@gnat: dovresti dare una risposta.
Martin York,

Risposte:


26

sizeof(a)/sizeof(t)codifica esplicitamente il tipo nell'espressione. Ora hai il tipo specificato in più posizioni, senza supporto del compilatore per assicurarti di utilizzare lo stesso tipo. Quindi, se cambi il tipo di base dell'array, ma non nell'espressione di conteggio (completamente separata), bingo: il tuo codice verrà compilato bene, ma il conteggio degli elementi sarà errato. Se sei fortunato, il tuo programma andrà in crash, ma in caso contrario funzionerà quasi completamente correttamente, ma ogni tanto si comporterà in modo totalmente bizzarro.

sizeof(a)/sizeof(a[0])è garantito per essere corretto, richiede solo il nome dell'array. Cambia il tipo e stai bene; cambia il nome dell'array e il compilatore si lamenterà. Non è necessario pensare: ci piace quel tipo di programmazione.


Bene, preferisco davvero sizeof a/sizeof*a, anche se non è davvero una differenza sostanziale.
Deduplicatore,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.