C语言复合语句问题

代码:#definemax(a,b)({typeof(a)_a=a;typeof(b)_b=b;_a>_b?_a:_b;})神奇的网友们,看见上面的语句问题来啦:请问这条... 代码:
#define max(a,b) ({typeof(a) _a = a;typeof(b) _b = b;_a > _b ? _a : _b;})

神奇的网友们,看见上面的语句 问题来啦:请问这条语句为什么能够通过编译?并最后一个条件运算符的结果。这个大括号哪里来的返回值?
为什么去掉外层的括号就会报错呢?
如果您的时间充裕 麻烦解释一下typeof 是个什么鬼?C没有个这个关键字啊!
感激不尽!!!
展开
 我来答
灵长目1990
2015-10-13 · TA获得超过2717个赞
知道小有建树答主
回答量:956
采纳率:50%
帮助的人:952万
展开全部
您好,你的疑惑涉及到两个问题。
第一:typeof关键字是linux内核中对C语言的一个新扩展。typeof(a)表示获取a的类型。假如a是int类型,那么typeof(a)就是int的意思。
第二:虽然大括号没有返回值,但是小括号有。C语言的小括号里面表示一条语句,返回值是多条语句中最靠右的语句的返回值,比如(a=2,b=3,c=a+b),返回值就是c的值等于5。
综上所述,上述语句其实就是返回了_a和_b中较大的一个元素。
最后,提醒注意#define的用法是整体代换!

懂了请采纳,如果还有疑惑请提出探讨~~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式