带有哈希的预处理程序指令

时间:2013-05-24 16:33:20

标签: c c-preprocessor preprocessor-directive

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

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

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

那么,输出是怎么来的?

2 个答案:

答案 0 :(得分:0)

双哈希##是预处理器的token pasting operatorprintf将重写为:

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

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

答案 1 :(得分:0)

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