在C ++预处理器中组合两个#defined符号

时间:2013-05-16 15:30:18

标签: c++ c-preprocessor

我想这样做:

#define VERSION XY123
#define PRODUCT MyApplication_VERSION

因此PRODUCT实际上是MyApplication_XY123。我尝试过使用合并运算符##,但成效有限......

#define VERSION XY123
#define PRODUCT MyApplication_##VERSION

=> MyApplication_VERSION

#define VERSION XY123
#define PRODUCT MyApplication_##(VERSION)

=> MyApplication_(XY123) - 关闭但不完全

我想要的是什么?

3 个答案:

答案 0 :(得分:7)

令牌粘贴使用宏的参数。所以试试这个

#define VERSION XY123
#define PASTE(x) MyApplication_ ## x
#define PRODUCT PASTE(VERSION)

答案 1 :(得分:3)

{/ 1}}运算符在参数替换之前执行 地点。经典的解决方案是使用帮助器:

##

答案 2 :(得分:1)

计算机科学中的所有问题都可以通过额外的间接来解决:

#define JOIN_(X,Y) X##Y
#define JOIN(X,Y) JOIN_(X,Y)
#define VERSION XY123
#define PRODUCT JOIN(MyApplication_,VERSION)