关于({})值的问题

发布于 2022-10-15 08:42:42 字数 731 浏览 20 评论 0

本帖最后由 jeung 于 2011-04-24 16:53 编辑

今天查到了让宏定义能像函数一样有一个返回值的方法:

#define FUNC() \
             ({ \
                     int  ret; \
                     ...............   \
                     ret;   \
              })

才知道C语法中有这么一个东西,谭浩强的书中好像没提到,所以就这个向大家请教一下:怎么会有({})这么怪异的组合,这个({})是不是也是有值的,这个值就是({})中最后一个表达式的值?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

心安伴我暖 2022-10-22 08:42:42

参考C++ inline

焚却相思 2022-10-22 08:42:42

本帖最后由 jeung 于 2011-04-24 20:43 编辑

回复 2# action08

    额,这个贴是问C的        = =C99有inline了,可我还是想问下这个语法

很快妥协 2022-10-22 08:42:42

谭浩强没提到的东西多了去了……
不过这个好像还真不是标准语法,是 gcc 的扩展。

染墨丶若流云 2022-10-22 08:42:42

回复 1# jeung

这样做的意义是什么?
既然是一段宏,你直接把ret的声明放外面。在宏里直接用不就得了。为什么要拿这么个东西来模拟返回值?

往日 2022-10-22 08:42:42

回复 5# madoldman

    那你把ret放在外部的意义又是什么,那在你看来是不是函数返回值也没啥意义,干脆不要返回值直接外部建个变量让函数改它好了     我这里问的是c语法

无名指的心愿 2022-10-22 08:42:42

回复 6# jeung

函数里和宏里面怎么一样啊……
不过又讨论语法,又提谭浩强的书的,我还真没见过。。。
这个我确实不知道怎么回事,还是翻翻标准去吧。

扛起拖把扫天下 2022-10-22 08:42:42

{}是作用域
()是为了使之变成一个表达式,取最后语句的值

还在原地等你 2022-10-22 08:42:42

()運算。

温柔戏命师 2022-10-22 08:42:42

回复 8# hellioncu

    取最后一条语句是怎么规定的呢?刚翻了一下c99,没找到在哪呢……

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文