#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
此代码给出输出 100,但如果实现了预处理器,printf
将被重写为:
printf("%d",var##12);
那么,输出是怎么来的呢?
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
此代码给出输出 100,但如果实现了预处理器,printf
将被重写为:
printf("%d",var##12);
那么,输出是怎么来的呢?
双散列##
是预处理器的标记粘贴操作符。将printf
像这样重写:
printf("%d",var12); // No double-hash
双数字符号或“标记粘贴”运算符 (##),有时称为“合并”运算符,用于类对象宏和类函数宏。它允许将单独的标记连接到单个标记中,因此不能是宏定义中的第一个或最后一个标记。
因为f(var, 12)
被替换为var12
,这是您在上面一行中声明和分配的变量的名称。预处理器指令##
将两个参数粘贴在一起。