【发布时间】:2009-10-23 09:26:57
【问题描述】:
我知道 sizeof 是一个运算符,它在编译时被评估为一个整数常量。 但它似乎不能在 #if 预处理器指令中使用,例如:
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin-gcc 3.4.4 以及 Visual C++ 6.0 报编译错误)
为什么不允许这样使用?
【问题讨论】:
标签: c c-preprocessor sizeof
我知道 sizeof 是一个运算符,它在编译时被评估为一个整数常量。 但它似乎不能在 #if 预处理器指令中使用,例如:
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin-gcc 3.4.4 以及 Visual C++ 6.0 报编译错误)
为什么不允许这样使用?
【问题讨论】:
标签: c c-preprocessor sizeof
因为sizeof是在编译时评估的,而指令是在编译之前评估的,而这样做的部分不是编译器,所以它不会理解sizeof的含义。
【讨论】:
sizeof 发生在稍后阶段。
sizeof 是一个 C 运算符。您不能在预处理器指令中使用 C 代码。预处理器指令在编译发生之前进行评估。
【讨论】:
== 操作符,这是预处理器指令中使用的操作符。