13

在这个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并给出如下输出gcc-4.3.4

UnDefinedSymbolicConstant is equal to 0

那么, 这是标准行为还是仅在 gcc 中这样工作?

4

2 回答 2

13

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

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

于 2012-07-04T13:25:17.800 回答
6

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

`-Wundef': 每当在 `#if' 指令中遇到不是宏的标识符时发出警告,在 `defined' 之外。这样的标识符被零替换。

于 2012-07-04T13:32:05.003 回答