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

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

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

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

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

因为sizeof是在编译时评估的,而在编译之前评估指令,并且执行该操作的部分不是编译器,因此它将无法理解sizeof含义。

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