预处理器:只展开一次宏
Pre-processor: Expand a macro only once
是否可以只展开一次宏?在以下示例中,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)'
Is it possible to have a macro expanded only once?
不,不能部分展开宏。
仅在使用 MYCONCAT
的最后一个位置之后(使用扩展到 BAR
的内容)而不是之前包含定义 BAR
的文件。
只需将 #define BAR
更改为 #define _BAR
,然后从 func
中删除 _
。
#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) // 'func_BAR(10)'
是否可以只展开一次宏?在以下示例中,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)'
Is it possible to have a macro expanded only once?
不,不能部分展开宏。
仅在使用 MYCONCAT
的最后一个位置之后(使用扩展到 BAR
的内容)而不是之前包含定义 BAR
的文件。
只需将 #define BAR
更改为 #define _BAR
,然后从 func
中删除 _
。
#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) // 'func_BAR(10)'