我定义了以下宏:
#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");
它编译没有问题。
答案 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");