我有一些通用代码,使用预处理宏将某个前缀添加到其他宏中。下面是一个简化的示例:
#define MY_VAR(x) prefix_##x
"
"prefix_"实际上是在其他地方定义的,因此每次包含文件时都会有所不同。它运行良好,但现在我有一些代码,如果其中一个标记不存在,我想跳过它,但这并不起作用:
"#if defined MY_VAR(hello)
我希望它能扩展成这样:
我想要的是将其扩展为:
#ifdef prefix_hello
但我不知道该怎么做。我需要使用MY_VAR()宏来进行扩展,所以我不能硬编码名称。(实际上是为了一些测试代码,同一段代码每次都会包含不同的前缀来测试一堆类,我想跳过一些类的几个测试。)C++预处理器能实现这个吗?
更新: 下面是一些半可编译代码,以进一步证明问题:(为避免将其挤入下面的注释中)
#define PREFIX hello
#define DO_COMBINE(p, x) p ## _ ## x
#define COMBINE(p, x) DO_COMBINE(p, x)
#define MY_VAR(x) COMBINE(PREFIX, x)
// MY_VAR(test) should evaluate to hello_test
#define hello_test "blah blah"
// This doesn't work
#ifdef MY_VAR(test)
printf("%s\n", MY_VAR(test));
#endif