Rozumiem, że sizeof jest operatorem, który jest oceniany w czasie kompilacji na stałą całkowitą. Ale wydaje się, że nie może być stosowany w dyrektywie preprocesora #if jak:Dlaczego nie mogę używać sizeof w stanie preprocesora?
#if 4 == sizeof(int)
typedef int Int32;
#endif
(Cygwin-gcc 3.4.4 oraz C++ 6.0 raport wizualna błędy kompilacji)
Dlaczego jest taki zwyczaj nie dozwolony?
Rzeczywiście wstępne przetwarzanie odbywa się podczas kompilacji, tylko w jednej z wcześniejszych faz. Ocena 'sizeof' dzieje się w późniejszej fazie. – sbi
@sbi Preprocessing nie jest częścią kompilacji - kompilator zwykle uruchamia preprocesor przed właściwą kompilacją, ale możesz poinstruować kompilator, aby tego nie robił. Odpowiedź RichN jest w 100% poprawna. – qrdl
Cóż, myliłem się, ale tylko w terminologii: To jedna z faz _Translation_. Zgodnie z tym http://stackoverflow.com/questions/1476892/1479972#1479972, nie ma fazy zwanej "kompilacją", więc to, co jest z tym związane, wydaje się być otwarte na interpretację. – sbi