#if是否将未定义的符号常量假设为0是标准的?

在这个c程序中

 #include int main() { #if UnDefinedSymbolicConstant==0 printf("UnDefinedSymbolicConstant is equal to 0\n "); #else printf("UnDefinedSymbolicConstant is not equal to 0\n"); #endif return 0; } 

UnDefinedSymbolicConstant在任何地方都没有#define ,仍被假定为0并将gcc-4.3.4的输出作为:

 UnDefinedSymbolicConstant is equal to 0 

那么, 这是标准的行为还是只在gcc中才这样?

是的,这由6.10.1中的标准规定:

在完成由于宏扩展和已定义的一元运算符而导致的所有替换后,所有剩余的标识符(包括与关键字词法相同的标识符)将替换为pp-number 0

这是默认设置,但您可能至少使用gcc的-Wundef选项为此生成警告。

`-Wundef’:只要在’#if’指令中遇到一个不是宏的标识符,在`defined’之外发出警告。 这些标识符被替换为零。