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