【发布时间】:2022-01-01 09:59:04
【问题描述】:
是否可以只扩展一次宏?在以下示例中,MYCONCAT 扩展为 func_1(10)。我希望它扩展到func_BAR(10)。
#define BAR 1 // included from a file I cannot change
#define FOO BAR
#define MYCONCAT2(c) func_ ## c
#define MYCONCAT(c, x) MYCONCAT2(c)(x)
MYCONCAT(FOO, 10) // is 'func_1(10)', but I want it to be 'func_BAR(10)'
【问题讨论】:
-
你可以
#undef BAR -
并不是说宏只展开一次;示例中的每个宏仅扩展一次:
MYCONCAT到带有MYCONCAT2的文本,MYCONCAT2到func_ ## c,FOO到BAR,以及BAR到1。您想要的是宏替换过程本身受到限制。 -
我觉得我们需要更多的上下文。如果您不希望 BAR 以这种方式扩展,为什么将其定义为 1?这个奇怪装置的最终目标和用例是什么?
-
你可以用枚举来代替
#define常量。 -
您能否将定义
BAR的文件包含在您使用MYCONCAT的点之后而不是之前?
标签: c c-preprocessor preprocessor