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 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?