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

Mr.*_*Boy 9 c++ c-preprocessor

我想要做:

#define VERSION XY123
#define PRODUCT MyApplication_VERSION
Run Code Online (Sandbox Code Playgroud)

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

#define VERSION XY123
#define PRODUCT MyApplication_##VERSION
Run Code Online (Sandbox Code Playgroud)

=> MyApplication_VERSION

#define VERSION XY123
#define PRODUCT MyApplication_##(VERSION)
Run Code Online (Sandbox Code Playgroud)

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

我想要的是什么?

bri*_*ing 7

令牌粘贴使用宏的参数.所以试试吧

#define VERSION XY123
#define PASTE(x) MyApplication_ ## x
#define PRODUCT PASTE(VERSION)
Run Code Online (Sandbox Code Playgroud)


Jam*_*nze 6

##运算符在进行参数替换之前执行操作。经典的解决方案是使用助手:

#define CONCAT2(a, b) a ## b
#define CONCAT(a, b) CONCAT2(a, b)

CONCAT(MyApplication_, VERSION)
Run Code Online (Sandbox Code Playgroud)