#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’之外发出警告。 这些标识符被替换为零。