多行预处理器macros

如何使多行预处理器macros? 我知道如何做一行:

#define sqr(X) (X*X) 

但我需要这样的东西:

 #define someMacro(X) class X : public otherClass { int foo; void doFoo(); }; 

我怎样才能使这个工作?

这只是一个例子,真正的macros观可能会很长。

您使用\作为续行转义字符。

 #define swap(a, b) { \ (a) ^= (b); \ (b) ^= (a); \ (a) ^= (b); \ } 

编辑:如@abelenky在评论中指出, \字符必须是行上的最后一个字符 。 如果不是(即使只是空白之后),你会在每一行后面的混淆错误消息。

您可以通过在每行的末尾添加一个反斜杠( \ )来制作一个跨越多行的macros:

 #define F(x) (x) \ * \ (x) 

请注意,正如Kerrek SB和coaddict所指出的那样,在接受的答案中应该指出, 总是在你的论点中加上大括号。 sqr例子就是CompSci课程中教的简单例子。

问题出在这里:如果你定义了你所说的“sqr(1 + 5)”,会发生什么? 你得到“1 + 5 * 1 + 5”或11
如果你正确地放置括号,# #define sqr(x) ((x)*(x))
你得到((1 + 5)*(1 + 5))或我们想要的36 …美丽。

埃德S.将有“交换”相同的问题,

您需要通过\转义行来逃避行尾的换行符:

 #define sqr(X) \ ((X)*(X))