gpt4 book ai didi

c - # 和 ## 在宏中

转载 作者:太空狗 更新时间:2023-10-29 16:22:59 25 4
gpt4 key购买 nike

  #include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)

int main()
{
printf("%s\n",h(f(1,2)));
printf("%s\n",g(f(1,2)));
return 0;
}

仅仅通过查看程序,人们“可能”期望两个 printf 语句的输出是相同的。但是在运行程序时你会得到它:

bash$ ./a.out
12
f(1,2)
bash$

为什么会这样?

最佳答案

在类函数宏中出现的参数,除非它是### 的操作数,否则在替换它之前展开并重新扫描整个进一步扩大。因为 g 的参数 # 的操作数,所以参数没有扩展而是立即字符串化 ("f(1, 2)")。因为h的参数不是#的操作数,也不是##的操作数,所以参数首先展开(12),然后替换 (g(12)),然后重新扫描并进一步展开 ("12")。

关于c - # 和 ## 在宏中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364971/

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