在此c
计划中
#include<stdio.h>
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 并将output on gcc-4.3.4
视为:
UnDefinedSymbolicConstant is equal to 0
所以, 这是标准行为还是只在gcc中使用?
答案 0 :(得分:13)
是的,这由6.10.1中的标准指定:
在由于宏扩展和已定义的一元运算符执行的所有替换之后,所有剩余的标识符(包括与关键字词法相同的标识符)将替换为pp-number 0
答案 1 :(得分:6)
这是默认设置,但您至少可以使用gcc的-Wundef
选项为此生成警告。
<强>`-Wundef':强> 每当遇到非宏的标识符时发出警告 一个`#if'指令,在`defined'之外。这样的标识符是 替换为零。