defined
在条件指令中使用扩展被视为未定义行为.
从C99标准:6.10.1/4 | C++ 11标准最后工作草案(n4296)16.1/4
如果
defined
由于此替换过程而生成令牌,或者defined
在宏替换之前使用一元运算符与两个指定表单中的一个不匹配,则行为是未定义的.
从C99标准:6.10.8/4 | C++ 11标准最后工作草案(n4296)16.8/4
无这些宏名称,也不标识符
defined
,应的对象#define
或#undef
预处理指令.
GNU - CPP 4.2.3
如果
defined
运算符是宏扩展的结果,则C标准表示行为未定义.GNU cpp将其视为真正定义的运算符并对其进行正常评估.如果您使用命令行选项'-pedantic',它将在您的代码使用此功能的任何地方发出警告,因为其他编译器可能会以不同方式处理它.