## 对于 C(C++) 预处理器意味着什么?
我下面有一个 C 程序:
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
当我只运行预处理器时,它会扩展它,
{
int var12=100;
printf("%d",var12);
}
这就是输出为 100 的原因。
任何人都可以告诉我预处理器如何/为什么扩展 var## 12 到 var12?
I have a C program below:
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
when I run just the preprocessor it expands this as
{
int var12=100;
printf("%d",var12);
}
which is the reason why the output is 100.
Can anybody tell me how/why the preprocessor expands var##12 to var12
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
没什么太花哨的:
##
告诉预处理器连接左侧和右侧,请参阅 http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
nothing too fancy:
##
tells the preprocessor to concatenate the left and right sidessee http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
##
是 令牌粘贴运算符< /a>##
is Token Pasting Operator因为 ## 是 c 预处理器的标记连接运算符。
或者也许我不明白这个问题。
because ## is a token concatenation operator for the c preprocessor.
Or maybe I don't understand the question.
#define f(g,g2) g##g2
## 用于在 C 预处理器中连接两个宏。
因此,在编译 f(var,12) 之前,应将预处理器替换为 var12,从而获得输出。
#define f(g,g2) g##g2
## is usued to concatenate two macros in c-preprocessor.
So before compiling f(var,12) should replace by the preprocessor with var12 and hence you got the output.