wax5798 2021-05-10 09:13 采纳率: 90.9%
浏览 73
已采纳

C 语言中,关于 ( ) 运算符的解释

最近看内核代码的时候,发现一个不太理解的宏定义,大致格式如下

#define FUNC(x,y) ({x=1; y=2;})

这里的效果是,给 x,y 分别赋值,并且把最后一条语句的结果作为 FUNC 的返回值。这个宏应该怎么解释呢?( ) 和 { } 分别代表什么意义?是怎么起到有返回值效果的?

这个定义中,如果没有 ( ) 符号,则不会有返回值效果

查看 《C++ Primer》中的 “运算符优先级表” 中对 ( ) 符号的功能解释,只有三种,感觉都匹配不上

1、函数调用

2、类型构造

3、类型转换

  • 写回答

7条回答 默认 最新

  • wax5798 2021-05-10 11:54
    关注

    采用论坛中 均陵鼠侠 的答案:

    这种写法在标准的C和C++中都是不合法的,属于 GNU C 的扩展。在 GNU C 中,可以用一对圆括号将复合语句括起来,如此一来,你就可以在表达式中使用循环语句、选择语句和局部变量。

    具体的说明,详见 GCC 的这篇文档:https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Statement-Exprs.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部