多行预处理器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))