最近看内核代码的时候,发现一个不太理解的宏定义,大致格式如下
#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