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

时间:2012-07-04 13:19:43

标签: c gcc c-preprocessor

在此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中使用?

2 个答案:

答案 0 :(得分:13)

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

  

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

答案 1 :(得分:6)

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

  

<强>`-Wundef':    每当遇到非宏的标识符时发出警告    一个`#if'指令,在`defined'之外。这样的标识符是    替换为零。