12.1.3 ##运算符
在宏定义中,##这个运算符用于把两个标记(token)连在一起。它的前面(或后面)是宏的参数名称。预处理程序使用调用该宏时提供的实际参数,并且根据该参数和##之后(或之前)的标记创建单个标记。
例如,假设有一个从x1到x100的变量列表,可以编写一个名为printx的宏,它简单地使用一个1~100的整数值作为它的参数,并如下显示对应的x变量:
define printx(n)printf(“i\n”,x##n)
该定义的以下部分
x##n
表示使用##之前和之后的标记(分别是字母x和参数n),并依据它们构造一个标记。因此调用
printx(20);
将被扩展成以下表达式:
printf(“i\n”,x20);
printx宏甚至可以使用前面定义的printint宏来获得变量名及其显示的值:
define printx(n)printint(x##n)
调用
printx(10);
首先扩展为
printint(x10);
然后扩展为
printf(“x10”“%i\n”,x10);
最终变成
printf(“x10=%i\n”,x10);