1
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}

此代码给出输出 100,但如果实现了预处理器,printf将被重写为:

printf("%d",var##12);

那么,输出是怎么来的呢?

4

2 回答 2

0

双散列##是预处理器的标记粘贴操作符。将printf像这样重写:

printf("%d",var12); // No double-hash

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

于 2013-05-24T16:36:05.700 回答
0

因为f(var, 12)被替换为var12,这是您在上面一行中声明和分配的变量的名称。预处理器指令##将两个参数粘贴在一起。

于 2013-05-24T16:39:27.733 回答