问题描述
我想知道该代码输出背后的原因.我无法提出答案.
#define f(a,b) a##b #define g(a) #a #define h(a) g(a) void main() { printf("%s %s",h(f(1,2)),g(f(1,2))); }
ps:输出为12 f(1,2).我以为是12 12或f(1,2) f(1,2).
推荐答案
h(f(1,2))
f(1,2)被代替a. a不是#或##运算符的主题,因此将其扩展到12.现在您有g(12)扩展到"12".
g(f(1,2))
f(1,2)被代替a. #运算符应用于a可防止宏扩展,因此结果实际上是"f(1,2)".
其他推荐答案
只需进行替换.
h(f(1, 2)) -> g(12) -> "12" g(f(1,2)) -> "f(1, 2)"
您还应该查看在这里.