【发布时间】:2020-11-12 09:57:49
【问题描述】:
这是一个很奇怪的问题。这是一个看起来非常简单的函数式宏,我已经多次看到它的示例。我什至以前用过!但是,我只是在 6 小时后无法正常工作。我累了,决定在这里问。也许有人发现了问题。最小的可重现情况是:
enum e {
x, y, z,
#define Func(X, Y, Z) \
my_##X = Y
Func(x, y, z),
};
used in clang 源代码的方式类似。我也包含一个包含宏定义和使用的文件。
编辑:
非常感谢您的回答和 cmets。我确实使用过 Godbolt,但是在我的构建失败之后。事实证明,宏在我的构建过程中从未失败过。那是因为我没有使用宏!它没有被使用,所以它从来没有产生过输出。这是相当可耻的。我必须接受我的错误,然后继续前进。我必须通过本地预处理来检查它。在 Godbolt 中获取空字符串让我相信我做错了什么。
【问题讨论】:
-
为什么我们必须在枚举中使用这么奇怪的函数?
-
它应该如何工作以及它是如何工作的?
-
它扩展到
my_x = y...这不是你想要的吗? -
@ForceBru 我在我的计算机上使用 gcc 和 clang 预处理器进行了测试。在那里工作正常。您的godbolt示例也缺少许多其他行;可能是其花哨的输出渲染有些奇怪。
-
@Shawn,确实,取消选择“未使用的标签”会显示正确的输出。也许 OP 也在 Godbolt 中运行它
标签: c++ c c-preprocessor