【发布时间】:2012-11-14 17:38:42
【问题描述】:
我知道这段代码在 C 和 C++ 中都有效:
#define FOO 0
#define FOO 0
ISO/IEC 14882:2011
16.3 宏替换 [cpp.replace]
2 当前定义为类对象宏的标识符可能是 由另一个 #define 预处理指令重新定义,前提是 第二个定义是一个类似对象的宏定义和两个 替换列表是相同的,否则程序格式错误。 同样,当前定义为类函数宏的标识符可以 由另一个 #define 预处理指令重新定义,前提是 第二个定义是一个类似函数的宏定义,它有 相同数量和拼写的参数,以及两个替换列表 相同,否则程序格式错误。
但是这段代码呢?
#define FOO 0
#define FOO FOO
替换列表在预处理开始时并不相同(仅在第一次替换发生时)。
【问题讨论】:
-
这对我来说似乎是个坏方法。可能会引起未来开发人员的混淆和可能的错误。
-
@Jonathan Wood 我不想在实际代码中使用它,只是有趣的时刻