gpt4 book ai didi

c - 在宏中使用 ({ ... }) 括号来吞掉分号

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

通常,在宏中,您会看到人们使用 do { ... } while(0) 来吞掉分号。我刚遇到一个例子,他们使用 ({ ... }) 代替,它似乎不仅吞下了分号,而且似乎还允许您返回一个值:

#define NEW_MACRO()  ({ int x = 1; int y = 2; x+y; })

if(1)
val = NEW_MACRO();
else
printf("this never prints");`

val 会变成 3。我找不到任何关于它的文档,所以我对它有点警惕。这种方法有什么陷阱吗?

最佳答案

这在标准 C 中是无效的。

一些编译器可能有允许这种事情的扩展(例如 GCC 的 statement expressions)。

关于c - 在宏中使用 ({ ... }) 括号来吞掉分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409694/

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