11

我想要做:

#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) - 关闭但不完全

我想要的可能吗?

4

3 回答 3

8

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

#define VERSION XY123
#define PASTE(x) MyApplication_ ## x
#define PRODUCT PASTE(VERSION)
于 2013-05-16T15:37:40.830 回答
8

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

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

CONCAT(MyApplication_, VERSION)
于 2013-05-16T15:37:51.663 回答
2

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

#define JOIN_(X,Y) X##Y
#define JOIN(X,Y) JOIN_(X,Y)
#define VERSION XY123
#define PRODUCT JOIN(MyApplication_,VERSION)
于 2013-05-16T15:37:03.267 回答