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);