linux中min函数用法,linux内核中的min、max函数

这些天为了整理一下前段时间看ldd3时所学的驱动知识,所以就去看了看usb驱动。不看不知道,一看吓一跳,里面有很多语法我发现用的太好了,不像我们平时那样写代码。里面写的代码真是太好了。然而要理解到里面的东西还是不容易的。

今天看见usb_stor_access_xfer_buf函数的时候,想看看里面的min 函数是不是按照我们写的那么写。但是一看傻啦,还有些东东我还没用过,于是赶紧google一下,那到底下面代码是什么样的呢?大家可以到、include/linux/kernel.h 里面去找。不相找事吧,那好我贴在这里。

/*

* min()/max() macros that also do

* strict type-checking.. See the

* "unnecessary" pointer comparison.

*/

#define min(x,y) ({ /

typeof(x) _x = (x); /

typeof(y) _y = (y); /

(void) (&_x == &_y);  /

_x < _y ? _x : _y; })

#define max(x,y) ({ /

typeof(x) _x = (x); /

typeof(y) _y = (y); /

(void) (&_x == &_y);  /

_x > _y ? _x : _y; })

当我google 了以后发现很多人都看过这个函数,看来我是out了。这都是在大学欠下的账啊,正所谓:“出来混,迟早都要还的”,还好今天就开始学了。

下面看一位兄弟的理解,他讲的很好。

http://blog.chinaunix.net/u/24474/showart_1101969.html

min宏定义探究

在GCC的文档中建议使用如下的min宏定义:

引用:#define min(X,Y)  /

(__extension__  /

({  /

typeof(X) __x=(X), __y=(Y);   /

(__x<__y>

}) /

)

本文讨论了这样作法的意义。

1、传统的min带来的副作用

2、GCC中的({statement list})的扩展

3、typeof(expression)

4、__extension__的含义

5、使用typeof和({})实现min,避免了副作用

附录1、旧版本的的GCC中的的解决方法

附录2、C++中使用templ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值