C++ 替换#宏中的定义值

C++ 替换#宏中的定义值,c++,visual-c++,visual-studio-2008,c-preprocessor,C++,Visual C++,Visual Studio 2008,C Preprocessor,我希望SUITE\u NAME评估为UtilitiesTest\u Package123,但经过多次修改后,我仍然得到UtilitiesTest\u PACKAGE 注意:SUITE\u NAME用作标识符,而不是字符串。我把#和#操作符弄得乱七八糟,但似乎什么都不管用。预处理器有时需要大量的间接操作: #define PACKAGE Package123 #define TEST_SUITE_NAME_PACKAGE(Suite,Package) Suite##_##Package #defi

我希望
SUITE\u NAME
评估为
UtilitiesTest\u Package123
,但经过多次修改后,我仍然得到
UtilitiesTest\u PACKAGE


注意:
SUITE\u NAME
用作标识符,而不是字符串。我把
#
#
操作符弄得乱七八糟,但似乎什么都不管用。

预处理器有时需要大量的间接操作:

#define PACKAGE Package123
#define TEST_SUITE_NAME_PACKAGE(Suite,Package) Suite##_##Package
#define TEST_SUITE_NAME(Suite) TEST_SUITE_NAME_PACKAGE(Suite,PACKAGE)
#define SUITE_NAME TEST_SUITE_NAME(UtilitiesTest)

对于这种情况,这种粘贴方法是一种常见的预处理器技巧。

只需添加另一个间接级别

#define PACKAGE Package123
#define PASTE(x,y) x##_##y
#define TEST_SUITE_NAME_PACKAGE(Suite,Package) PASTE(Suite,Package)
#define TEST_SUITE_NAME(Suite) TEST_SUITE_NAME_PACKAGE(Suite,PACKAGE)
#define SUITE_NAME TEST_SUITE_NAME(UtilitiesTest)

这一定是个骗局,但我不知道我要找什么!任何能代表人民大会的事都行吗<代码>套件######包@alk我不认为是,因为我不想把它严格化?@John,同样的想法;它还提到了连接。
#define PACKAGE Package123
#define TEST_SUITE_NAME_PACKAGE(Suite,Package) Suite##_##Package
#define _TEST_SUITE_NAME_PACKAGE(Suite, PACKAGE) TEST_SUITE_NAME_PACKAGE(Suite,PACKAGE)
#define TEST_SUITE_NAME(Suite) _TEST_SUITE_NAME_PACKAGE(Suite,PACKAGE)
#define SUITE_NAME TEST_SUITE_NAME(UtilitiesTest)