为什么我不能在预处理器条件下使用sizeof?

fel*_*322 14 c sizeof c-preprocessor

我知道sizeof是一个运算符,它在编译时被计算为整数常量.但它似乎不能在#if预处理器指令中使用,如:

#if 4 == sizeof(int)
    typedef int Int32;
#endif
Run Code Online (Sandbox Code Playgroud)

(cygwin-gcc 3.4.4以及Visual C++ 6.0报告编译错误)

为什么不允许这样的使用?

Ric*_*chN 19

因为sizeof在编译时评估指令在编译之前进行评估,并且执行该操作的部分不是编译器,因此它将无法理解什么sizeof意思.

  • @sbi预处理不是编译的一部分 - 编译器通常在实际编译之前运行预处理器,但是你可以指示编译器不要这样做.RichN的答案是100%正确的. (4认同)

kgi*_*kis 10

sizeof是C运算符.您不能在预处理程序指令中使用C代码.在编译发生之前评估预处理程序指令.

  • @ felix0322:预处理器有自己的`==`运算符,它是预处理程序指令中使用的运算符. (3认同)