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

StackOverflow https://stackoverflow.com/questions/1612322

  •  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-код в директивах препроцессора. Директивы препроцессора оцениваются до того, как произойдет компиляция.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top