Ответ 1
Поскольку sizeof
оценивается во время компиляции, тогда как директивы оцениваются до, а часть, которая делает это не компилятором, поэтому не понимает, что означает sizeof
.
Я понимаю, что sizeof является оператором, который оценивается во время компиляции целой константе. Но, похоже, он не может использоваться в директиве препроцессора #if, например:
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin-gcc 3.4.4, а также ошибки компиляции отчета Visual С++ 6.0)
Почему такое использование не разрешено?
Поскольку sizeof
оценивается во время компиляции, тогда как директивы оцениваются до, а часть, которая делает это не компилятором, поэтому не понимает, что означает sizeof
.
sizeof является оператором C. Вы не можете использовать код C в директивах препроцессора. Директивы препроцессора оцениваются до компиляции.