Почему я не могу использовать sizeof в условии препроцессора?

Я понимаю, что sizeof является оператором, который оценивается во время компиляции целой константе. Но, похоже, он не может использоваться в директиве препроцессора #if, например:

#if 4 == sizeof(int)
    typedef int Int32;
#endif

(cygwin-gcc 3.4.4, а также ошибки компиляции отчета Visual С++ 6.0)

Почему такое использование не разрешено?

Ответы

Ответ 1

Поскольку sizeof оценивается во время компиляции, тогда как директивы оцениваются до, а часть, которая делает это не компилятором, поэтому не понимает, что означает sizeof.

Ответ 2

sizeof является оператором C. Вы не можете использовать код C в директивах препроцессора. Директивы препроцессора оцениваются до компиляции.