关于({})值的问题
本帖最后由 jeung 于 2011-04-24 16:53 编辑
今天查到了让宏定义能像函数一样有一个返回值的方法:
#define FUNC() \
({ \
int ret; \
............... \
ret; \
})
才知道C语法中有这么一个东西,谭浩强的书中好像没提到,所以就这个向大家请教一下:怎么会有({})这么怪异的组合,这个({})是不是也是有值的,这个值就是({})中最后一个表达式的值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
参考C++ inline
本帖最后由 jeung 于 2011-04-24 20:43 编辑
回复 2# action08
额,这个贴是问C的 = =C99有inline了,可我还是想问下这个语法
谭浩强没提到的东西多了去了……
不过这个好像还真不是标准语法,是 gcc 的扩展。
回复 1# jeung
这样做的意义是什么?
既然是一段宏,你直接把ret的声明放外面。在宏里直接用不就得了。为什么要拿这么个东西来模拟返回值?
回复 5# madoldman
那你把ret放在外部的意义又是什么,那在你看来是不是函数返回值也没啥意义,干脆不要返回值直接外部建个变量让函数改它好了 我这里问的是c语法
回复 6# jeung
函数里和宏里面怎么一样啊……
不过又讨论语法,又提谭浩强的书的,我还真没见过。。。
这个我确实不知道怎么回事,还是翻翻标准去吧。
{}是作用域
()是为了使之变成一个表达式,取最后语句的值
()運算。
回复 8# hellioncu
取最后一条语句是怎么规定的呢?刚翻了一下c99,没找到在哪呢……