是否可以为 #define 分配定义的结果?

Can a #define be assigned the result of defined?

本文关键字:定义 结果 分配 #define 是否      更新时间:2023-10-16

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

#define FOO
#define BAR defined(FOO)
#if BAR
int x = 1;
#else
int x = 2;
#endif

在条件指令中使用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预处理指令的主题

  • 革奴计划 - CPP 4.2.3

如果defined运算符由于宏扩展而出现,则 C 标准说行为是未定义的。GNU cpp 将其视为 真正定义的运算符并正常计算它。它会警告 代码使用此功能(如果使用命令行)的位置 选项"-pedantic",因为其他编译器可能会以不同的方式处理它。