Chinaunix首页 | 论坛 | 博客
  • 博客访问: 379989
  • 博文数量: 73
  • 博客积分: 3574
  • 博客等级: 中校
  • 技术积分: 1503
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-26 11:17
文章分类

全部博文(73)

文章存档

2012年(14)

2011年(15)

2010年(44)

分类: LINUX

2012-03-17 12:55:09


  1. #define min(x, y) (( \
  2. const typeof(x) _x = (x); \
  3. const typeof(y) _y = (y); \
  4. (void) (&_x == &_y); \
  5. _x < _y ? _x : _y; ))

 在内核中的min函数的实现方式如上代码所示,其中比较令人疑惑的一句代码在地4行
 (void) (&_x == &_y)
 第一眼看上去貌似在判断两个参数的类型是否相等,但其实却是在判断两种类型的地址。。

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

阅读(2123) | 评论(0) | 转发(1) |
0

上一篇:linux命令之mpstat

下一篇:python解析pcap文件

给主人留下些什么吧!~~