What is a##b
& #a
?
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
main()
{
printf("%s\n",h(f(1,2))); //how should I interpret this?? [line 1]
printf("%s\n",g(f(1,2))); //and this? [line 2]
}
这个程序如何运作?
输出是
12
f(1, 2)
现在我明白了a##b
& #a
work. 但为什么两种情况(第 1 行和第 2 行)的结果不同呢?
## 将两个标记连接在一起。它只能在预处理器中使用。
f(1,2)
变成1 ## 2
变成12
.
# 运算符本身字符串化代币:#a
变成"a"
。所以,g(f(1,2))
变成"f(1,2)"
当预处理器完成它时。
h(f(1,2))
是有效地#(1 ## 2)
这变成#12
这变成"12"
当预处理器运行它时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)