Oznacza to samo, co wszystkie inne zastosowania sizeof
. Oblicza wielkość wyrażenia.
W tym konkretnym przypadku podejrzewam, że kontrola ma na celu zapewnienie pewnej własności t
(która powinna być nazwą typu, a nie zmienną), którego nie znam z kontekstu ... Być może jest to możliwe traktować go jako wskaźnik (potrzebny do indeksowania tablicy), który wykluczałby niektóre typy. Komentarz obok makra mówi: /* provoke compile error for invalid uses of size argument */
, który wydaje się wspierać tę teorię.
Należy pamiętać, że sizeof
to operator, a nie funkcja. Nawias nie jest potrzebny, chyba że chcesz obliczyć rozmiar typu bezpośrednio, a następnie są częścią wyrażenia (jest to wyrażenie rzutowania). Więc to może być napisane sizeof t == sizeof t[1] && ...
, lub może (sizeof t == sizeof t[1])
dla jasności.
Jest to bardzo dobry styl do użycia, ponieważ "blokuje" rozmiar obliczany do odpowiedniej macierzy, zamiast powtarzać typ t
. Tak więc, jeśli typ miał ulec zmianie, wyrażenie automatycznie dostosowuje się i nadal oblicza właściwą rzecz.
Wielu programistów C wydaje się preferować posiadanie nawiasów wokół argumentów do sizeof
we wszystkich przypadkach, z jakiegoś powodu.
"Jeśli' t' jest zmienną tablicową, 'sizeof (t) == sizeof (t [1])' będzie fałszywe "czy to naprawdę zawsze prawda? –
@AndreasGrapentin: Nie dla tablicy z jednym elementem, ale może pojawić się ostrzeżenie kompilatora o indeksowaniu tablicy poza granicami. – interjay