如何在CPP中连接宏

时间:2018-01-29 03:58:04

标签: c macros concatenation c-preprocessor

#define STR1 "NEW"
#define STR2 PILLAR
#define MAKE_STR(x) #x
#define STR3 STR1 MAKE_STR(STR2)
printf(STR3 " hello world\n");

上述声明扩展为

printf("NEWSTR2 hello world\n");

我需要像“NEWPILLAR hello world”这样的东西。有什么输入吗?

1 个答案:

答案 0 :(得分:0)

在string-ifying之前展开STR2

#define STR1 "NEW"
// #define STR2 PILLAR
#define STR2 MAKE_STR(PILLAR)
#define MAKE_STR(x) #x
// #define STR3 STR1 MAKE_STR(STR2)
#define STR3 STR1 STR2
printf(STR3 " hello world\n");

或者,如果您确实需要从其他地方定义STR2

#define EXPAND_MAKE_STR(x) MAKE_STR(x)
#define STR3 STR1 EXPAND_MAKE_STR(STR2)