使用宏中的#define

时间:2014-10-31 22:57:02

标签: c c-preprocessor

我有一个名为#define的预处理器常量CurrentClassMethod读取此常量以构建当前类的方法声明。

#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字符串。

知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

你必须扩展它两次

#define xx(x0,x1) x0 ## _ ## x1
#define x(x0,x1) xx(x0,x1)
#define Method(y) \
    x(CurrentClass,y)
相关问题