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

the*_*tic -2 c c++ standards c-preprocessor

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

#define FOO
#define BAR defined(FOO)
#if BAR
    int x = 1;
#else
    int x = 2;
#endif
Run Code Online (Sandbox Code Playgroud)

Men*_*ックス 5

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

如果defined由于此替换过程而生成令牌,或者defined在宏替换之前使用一元运算符与两个指定表单中的一个不匹配,则行为是未定义的.

无这些宏名称,也不标识符defined,应的对象#define或#undef预处理指令.

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