[英]Combining two #defined symbols in C++ preprocessor
I want to do: 我想要做:
#define VERSION XY123
#define PRODUCT MyApplication_VERSION
so that PRODUCT is actually MyApplication_XY123. 所以PRODUCT实际上是MyApplication_XY123。 I have tried playing with the merge operator ## but with limited success...
我尝试过使用合并运算符##,但成效有限......
#define VERSION XY123
#define PRODUCT MyApplication_##VERSION
=> MyApplication_VERSION => MyApplication_VERSION
#define VERSION XY123
#define PRODUCT MyApplication_##(VERSION)
=> MyApplication_(XY123) - close but not quite => MyApplication_(XY123) - 关闭但不完全
Is what I want possible? 我想要的是什么?
Token pasting works with arguments to macros. 令牌粘贴使用宏的参数。 So try this
所以试试吧
#define VERSION XY123
#define PASTE(x) MyApplication_ ## x
#define PRODUCT PASTE(VERSION)
The ##
operator acts before argument substitution has taken place. ##
运算符在参数替换发生之前起作用。 The classical solution is to use a helper: 经典的解决方案是使用帮助器:
#define CONCAT2(a, b) a ## b
#define CONCAT(a, b) CONCAT2(a, b)
CONCAT(MyApplication_, VERSION)
All problems in computer science can be solved by an extra level of indirection: 计算机科学中的所有问题都可以通过额外的间接来解决:
#define JOIN_(X,Y) X##Y
#define JOIN(X,Y) JOIN_(X,Y)
#define VERSION XY123
#define PRODUCT JOIN(MyApplication_,VERSION)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.