在:C++ FAQ - 其他技术问题 - [39.6]对于需要将两个令牌粘贴在一起的宏应该怎么做?
有人可以向我解释原因吗?我所读到的只是相信我,但我不能仅仅相信某事,因为有人这么说.
我尝试了这种方法,但我找不到任何错误:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
Run Code Online (Sandbox Code Playgroud)
那么为什么我需要这样做呢(引自网页):
但是,当您使用##时,需要双层间接.基本上你需要为"令牌粘贴"创建一个特殊的宏,例如:
Run Code Online (Sandbox Code Playgroud)#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b相信我 - 你真的需要这样做!(并且请没有人写信给我说它有时可以在没有第二层间接的情况下工作.尝试用__ LINE__连接一个符号然后看看会发生什么.)
编辑:有人也可以NAME2_HIDDEN在下面宣布之前解释他为什么使用?NAME2_HIDDEN在使用宏之前定义宏似乎更合乎逻辑.这是某种伎俩吗?