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

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

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

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

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

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

1、函数调用

2、类型构造

3、类型转换

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

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

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

相当于定义了一个函数.

参考这个

#define fun(x,y) 2*x+1/y
 
fun(1+4,(2+3))    //单纯的进行字符串替换
=> 2*1+4+1/(2+3)
所以等于2 + 4 + 0 = 6(注意后面1/6是整除)

 

其他的语法编译器不通过...

建议您用编译器 对c++底层如何操作参数的进行分析.

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

 希望对您有帮助,盼采纳:https://blog.csdn.net/it_xiangqiang/category_10581430.html