wax5798 2021-05-10 17: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 19:54
    关注

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

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

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

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

报告相同问题?

悬赏问题

  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口