##宏运算符在C ++中做了什么?

时间:2014-02-01 03:26:16

标签: c++ visual-studio-2010 macros

当我的 C ++ 书中说,如果我有五个名为fOnePrintftwoprintfthreeprintfourprint的函数,我感到非常困惑,和fFivePrint,您需要使用##声明它们, 你这样做:

#define fPrint(x) f##x## print 

有人可以向我解释如何使用这个##连接宏和简单的例子吗?

我正在使用MS Visual C ++ 2010 Express。

2 个答案:

答案 0 :(得分:1)

最简单的例子:

#define XY(x,y) x##y

翻译

XY(1,2)12

类似地,

#define fprint(S) f##S##print

会翻译

fprint(One)fOnePrint fprint(Two)fTwoPrint等等。

答案 1 :(得分:0)

使用##运算符没有任何强制性。但是,如果您愿意,可以通过写作,例如:

fPrint(two)("format string %d\n", value);

看起来有点好笑。但是,fPrint(two)宏会扩展为

ftwoprint

然后以下括号可能会使代码成为对函数的有效调用。没有什么可以阻止你写这个:

ftwoprint("format string %d\n", value);

宏观上有一个标志性的好处还远未明确。