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

时间:2009-10-23 09:26:58

标签: c c-preprocessor sizeof

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

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

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

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

2 个答案:

答案 0 :(得分:19)

因为sizeof在编译时被评估,而指令在编译之前被评估,并且执行该操作的部分不是编译器,所以它将无法理解{{1}意思是。

答案 1 :(得分:10)

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