网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 手机学院 | 邮件系统 | 网络安全 | 认证考试
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 操作系统 > Linux教程
本月文章推荐
.Linux新版内核本周发布 获得新的.
.Linux 网管 123 --- 第5章. 组态.
.Linux 开机程序之研讨.
.如何给linux添加新硬盘.
.Linux环境下使用XFS文件系统.
.读核日记(五).
.Linux Shadow-Password-HOWTO - .
.Linux内核2.6.25全新发布加入众多.
.Linux操作系统下文件系统的比较和.
.汉化你的RedHat全攻略(1)- 中文环.
.独辟蹊径:实现Linux下的局域网远.
.Linux命令Man解释:man : 显示线上.
.关于Linux操作系统内核中的指针和.
.Slackware官方内核源码打造适合自.
.关于Linux下网卡的一些技术信息.
.Linux下malloc/free与new/delete.
.Linux 指令篇:设备管理--dumpkeys.
.Linux管理员手册(5)--引导和关机.
.感受Linux KDE4.1桌面带来用户体.
.实用技巧:解决awstats关键字的乱.

学习园地:Linux系统内核中判断大小的宏

发表日期:2008-3-12

 

Min和Max宏:

/*
* 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; })

/*
* ..and if you can't take the strict
* types, you can specify one yourself.
*
* Or not use min/max at all, of course.
*/
#define min_t(type,x,y) \
({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
#define max_t(type,x,y) \
({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })

不是感觉跟我们用的有些不一样啊:

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

(void) (&_x == &_y)这句话本身都执行程序来讲完全是一句废话,它的作用在于,本身我们无法做这样的操作typeof(_x)==typeof(_y),所以故意判断他们2个的地址指针是否相等,显然是不可能相等,但是如果_x和_y的类型不一样,其指针类型也会不一样,2个不一样的指针类型进行比较操作,会抛出一个编译警告。也就是说char *p; int *q; 然后p==q;,这个判断因为一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。

由于内核是很多开发着一起开发的,其中还有一些其他的实现,就跟我们平常用的一样:

#define min(a,b) (((a) < (b)) ? (a) : (b))

试想:

min(++a,++b) ==> ((++a)<(++b))?(++a):(++b)

是不是就有问题了,传入的参数被加了两次。

上一篇:开源空间:关于Linux下时间编程的问题 人气:827
下一篇:Qtopia应用程序与Linux内核数据通信介绍 人气:948
浏览全部Linux的内容 Dreamweaver插件下载 网页广告代码 2009年新年快乐