是否可以为 #define 分配定义的结果?
Can a #define be assigned the result of defined?
以下代码的结果是用 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",因为其他编译器可能会以不同的方式处理它。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Spirit X3:自定义数字解析器在结果中产生意外的前导零
- 我定义的反向函数不是打印结果
- 为什么在 2 个不同的 cpp 文件中定义内联全局函数会导致神奇的结果
- 尝试在Windows结果上使用GLOG未定义的参考
- 是否可以为 #define 分配定义的结果?
- 类内定义函数的 decltype 推导结果
- 为什么定义了sizeof实现的结果
- std::具有自定义比较函数结果的排序函数错误:必须调用对非静态成员函数的引用
- 当我以不同方式定义对同一变量的引用时,结果不同
- 如果表达式的中间结果溢出,这是未定义的行为吗
- C++ 中的结果类型和重新定义
- 取消引用无效指针但不使用结果是否是C++中的未定义行为
- sizeof(*p) 是我未定义的结果
- C++为什么我的代码在Ubuntu上给出了想要的结果,但在Windows7上却有未定义的行为
- 主机上运行的自定义函数的Thrust结果不正确
- 是对定义良好的有符号整型进行位操作的结果
- 这种情况的结果会是什么?它是定义的还是与编译器相关的
- 用数学方法定义表达式的结果
- 按照visual studio中的定义获取命令结果