Significa lo stesso di tutti gli altri usi di sizeof
. Calcola la dimensione dell'espressione.
In questo caso particolare, ho il sospetto che il controllo abbia lo scopo di garantire alcune proprietà di t
(che dovrebbe essere un nome di tipo, non una variabile) che non conosco dal contesto ... Forse è possibile trattarlo come un puntatore (necessario per l'indicizzazione dell'array) che escluderebbe alcuni tipi. Il commento accanto alla macro dice /* provoke compile error for invalid uses of size argument */
che sembra supportare questa teoria.
Si noti che sizeof
è un operatore, non una funzione. Le parentesi non sono necessarie, tranne quando si desidera calcolare direttamente le dimensioni di un tipo e quindi fanno parte dell'espressione (è un'espressione cast). Quindi questo potrebbe essere scritto sizeof t == sizeof t[1] && ...
, o forse (sizeof t == sizeof t[1])
per chiarezza.
Questo è uno stile molto buono da utilizzare, poiché "blocca" la dimensione da calcolare alla matrice corretta, invece di ripetere il tipo di t
. Quindi, se il tipo dovesse cambiare, l'espressione si adatterebbe automaticamente e calcolerebbe ancora la cosa giusta.
Molti programmatori C sembrano preferire la parentesi intorno all'argomento a sizeof
in tutti i casi, per qualche motivo.
"Se' t' è una variabile di matrice, 'sizeof (t) == sizeof (t [1])' sarà false "è davvero vero? –
@AndreasGrapentin: non per un array di un elemento, ma è possibile che venga visualizzato un avviso del compilatore per indicizzare l'array fuori limite. – interjay