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