
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没有个这个关键字啊!
感激不尽!!! 展开
#define max(a,b) ({typeof(a) _a = a;typeof(b) _b = b;_a > _b ? _a : _b;})
神奇的网友们,看见上面的语句 问题来啦:请问这条语句为什么能够通过编译?并最后一个条件运算符的结果。这个大括号哪里来的返回值?
为什么去掉外层的括号就会报错呢?
如果您的时间充裕 麻烦解释一下typeof 是个什么鬼?C没有个这个关键字啊!
感激不尽!!! 展开
展开全部
您好,你的疑惑涉及到两个问题。
第一:typeof关键字是linux内核中对C语言的一个新扩展。typeof(a)表示获取a的类型。假如a是int类型,那么typeof(a)就是int的意思。
第二:虽然大括号没有返回值,但是小括号有。C语言的小括号里面表示一条语句,返回值是多条语句中最靠右的语句的返回值,比如(a=2,b=3,c=a+b),返回值就是c的值等于5。
综上所述,上述语句其实就是返回了_a和_b中较大的一个元素。
最后,提醒注意#define的用法是整体代换!
懂了请采纳,如果还有疑惑请提出探讨~~
第一:typeof关键字是linux内核中对C语言的一个新扩展。typeof(a)表示获取a的类型。假如a是int类型,那么typeof(a)就是int的意思。
第二:虽然大括号没有返回值,但是小括号有。C语言的小括号里面表示一条语句,返回值是多条语句中最靠右的语句的返回值,比如(a=2,b=3,c=a+b),返回值就是c的值等于5。
综上所述,上述语句其实就是返回了_a和_b中较大的一个元素。
最后,提醒注意#define的用法是整体代换!
懂了请采纳,如果还有疑惑请提出探讨~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询