用c ++替换MACROS中的括号

时间:2016-02-02 10:59:22

标签: c++ macros

我定义了以下宏:

#define START(x) A("start")-
#define ONE(x) -A(#x)
#define END -A("end");

在我的简单主要内容中我有:

(START ONE(one)) ONE(two) END

其中A("")是对类A的构造函数的调用。我已经使所有运算符都必须重载,二进制和一元减去,但编译器输出我错过了一个括号。

我想问的是预处理器究竟是如何将我的宏替换为我的代码的,因为当我运行时:

(A("start") - - A("one")) - A("two") - A("end");

它编译没有问题。

1 个答案:

答案 0 :(得分:0)

(START ONE("one")) ONE("two") END

这将扩展到:

(START -A("\"one\"")) -A("\"two\"") -A("end");

实际结果与您的期望之间的差异是START未展开,"one""two"的报价已被转义。

为了得到你想要的东西,START不应该接受参数,你不应该在ONE中使用stringify运算符:

#define START A("start")-
#define ONE(x) -A(x)
#define END -A("end");