16

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

#if 4 == sizeof(int)
    typedef int Int32;
#endif

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

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

4

2 回答 2

20

因为sizeof是在编译时评估的,而指令是在编译之前评估的,而这样做的部分不是编译器,所以它不会理解是什么sizeof意思。

于 2009-10-23T09:30:06.377 回答
11

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

于 2009-10-23T09:31:04.050 回答