标记粘贴运算符(##)

该双数字符号或 “标记粘贴”运算符 (##),有时称为 “合并”运算符,用于与对象和类似于函数的宏。 它允许的标记连接成一个标记并不能在宏定义中的第一个或最后一个标记。

如果在宏定义的形参由标记粘贴的运算符前面或后面,形参中未张开的实参立即替换。 宏展开该参数不执行在替换之前。

然后,移除标记粘贴运算符的每个显示时间 戳字符串的 ,因此,前面并在它后面的标记连接。 得到的标记必须是有效的标记。 如果是,则标记浏览可能的替换,则表示宏的名称。 该标识符表示连接的标记在替换前处理程序将知道的名称。 每个标记表示在编译器命令行中定义的,在过程或标记。 前面或后面运算符的空白是可选的。

此示例阐释指定的程序输出字符串的和标记粘贴运算符的使用:

#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;

如果宏调用具有数值参数。

paster( 9 );

宏 yield

printf_s( "token" "9" " = %d", token9 );

要分为

printf_s( "token9 = %d", token9 );

示例

// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;

int main()
{
   paster(9);
}
  

请参见

参考

预处理器运算符