在 c++ 中替换宏中的括号

Replacing of parentheses in MACROS in c++

本文关键字:替换 c++      更新时间:2023-10-16

我定义了以下宏:

#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");

它可以毫无问题地编译。

(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");