我明白sizeof是一个运算符,它在编译时被评估为一个整数常量。 但它似乎不能像在#if预处理指令可以使用:为什么我不能在预处理器条件中使用sizeof?
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin的-GCC 3.4.4以及Visual C++ 6.0编译报告错误)
为什么是这样的用法不允许?
我明白sizeof是一个运算符,它在编译时被评估为一个整数常量。 但它似乎不能像在#if预处理指令可以使用:为什么我不能在预处理器条件中使用sizeof?
#if 4 == sizeof(int)
typedef int Int32;
#endif
(cygwin的-GCC 3.4.4以及Visual C++ 6.0编译报告错误)
为什么是这样的用法不允许?
因为sizeof
是在编译时进行评估,同时指令被评估以前编译,这确实不是编译器的一部分,所以它不会明白什么sizeof
手段。
实际上,预处理发生在编译过程中,只是在其中一个早期阶段。评估'sizeof'发生在以后的阶段。 – sbi 2009-10-23 11:14:49
@sbi预处理不是编译的一部分 - 编译器通常在实际编译之前运行预处理器,但您可以指示编译器不要这样做。 RichN的答案是100%正确的。 – qrdl 2009-10-23 12:43:49
嗯,我错了,但只是在术语中:这是_translation_的一个阶段。根据这个http://stackoverflow.com/questions/1476892/1479972#1479972,也没有阶段称为“编译”,所以这意味着什么似乎可以解释。 – sbi 2009-10-23 21:34:51