可以为#define分配已定义的结果吗?

时间:2017-01-20 22:03:25

标签: c++ c c-preprocessor standards

以下代码的结果是用C或C ++定义的吗?

context.DbQuery<..>(...)

1 个答案:

答案 0 :(得分:5)

在条件指令中使用defined作为扩展被视为未定义行为

  

如果因此替换而生成令牌defined   进程或使用defined一元运算符与其中一个匹配   在宏替换之前的两个指定表单,行为是   未定义。

  

这些宏名称或标识符defined 都不是   #define#undef预处理指令的主题

  

如果defined运算符是宏扩展的结果,则显示   C标准表示行为未定义。 GNU cpp将其视为一个   真正定义的运算符并正常评估它。它会警告   如果使用命令行,则代码使用此功能的任何位置   选项'-pedantic',因为其他编译器可能会以不同的方式处理它。