码迷,mamicode.com
首页 > 其他好文 > 详细

(void)(&x==&y)

时间:2017-05-14 18:51:25      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:amp   无法   警告   class   否则   void   支持   int   操作   

#define max(x,y) ({ \
typeof(x) _x = (x);    \
typeof(y) _y = (y);    \
(void) (&_x == &_y);    \
_x > _y ?

_x : _y; })


typeof(x)的意思是取x的类型。这不是标准C里的,gcc支持。vc不支持
(void) (&_x == &_y);这句话本身从运行程序来讲全然是一句废话,它的作用在于,本身我们无法做这种操作typeof(_x)==typeof(_y)。所以有益推断他们2个的地址指针是否相等。显然是不可能相等,可是假设_x和_y的类型不一样,其指针类型也会不一样。2个不一样的指针类型进行比較操作,会抛出一个编译警告。也就是说char *p; int *q; 然后p==q;,这个推断由于一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。通过void显式丢弃一个表达式的值。否则有些编译器会就此给出警告信息。

(void)(&x==&y)

标签:amp   无法   警告   class   否则   void   支持   int   操作   

原文地址:http://www.cnblogs.com/zhchoutai/p/6853204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!