#if sizeof(int)
#error Can't use sizeof in a #if
#endif
Я получаю эту ошибку компилятора:
missing binary operator before token "("
Почему я не могу использовать здесь оператор sizeof?
Ответ 1
Потому что sizeof() вычисляется после запуска препроцессора, поэтому информация недоступна для #if.
Компиляторы
C логически разделены на две фазы, даже если большинство современных компиляторов их не разделяют. Во-первых, источник предварительно обработан. Это включает в себя разработку и замену всех условий препроцессора (#if, #define, замена определенных слов на их замены). Затем источник передается, обрабатывается, самому компилятору. Препроцессор только в минимальном понимании структуры C, он не имеет знания типа, поэтому он не может обрабатывать конструкции на уровне компилятора, такие как sizeof().
Ответ 2
Потому что вы можете использовать только литерал-константы в директиве препроцессора. Кроме того, sizeof (int) всегда больше, чем 0, поэтому я считаю, что это #if будет истинным все время в любом случае.
Ответ 3
#if - это препроцессорная директива.
sizeof() является оператором C и вычисляется во время компиляции.
Во время препроцессора (когда обрабатывается #if) операторы C не выполняются.