我有一个名为#define
的预处理器常量CurrentClass
宏Method
读取此常量以构建当前类的方法声明。
#define CurrentClass Foo
#define Method(x) \
CurrentClass ## _ ## x
void Method(bar)() {
}
预处理器产生以下结果:
void CurrentClass_bar() {
}
显然,CurrentClass_bar
此处应为Foo_bar
另一方面,以下结果会产生正确的结果。
#define Method(class, x) \
class ## _ ## x
void Method(Foo, bar)() {
}
出于某种原因,Method
无法将常量CurrentClass
与其他内容连接起来。仅CurrentClass
就会生成所需的Foo
字符串。
知道这里发生了什么吗?
答案 0 :(得分:2)
你必须扩展它两次
#define xx(x0,x1) x0 ## _ ## x1
#define x(x0,x1) xx(x0,x1)
#define Method(y) \
x(CurrentClass,y)