gpt4 book ai didi

C预处理器: stringize macro and identity macro

转载 作者:太空狗 更新时间:2023-10-29 17:10:09 27 4
gpt4 key购买 nike

我想知道这段代码输出背后的原因。我想不出答案。

#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 12f(1,2) f(1,2)

最佳答案

h(f(1,2))

f(1,2) 替换为 aa 不是 ### 运算符的主题,因此它被扩展为 12。现在您有了 g(12),它扩展为 "12"

g(f(1,2))

f(1,2) 替换为 a。应用于 a# 运算符可防止宏扩展,因此结果实际上是 "f(1,2)"

关于C预处理器: stringize macro and identity macro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610111/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com