宏定义中(void) (&_x == &_y);是怎么做到判断类型的?
2018-01-15 21:33
239 查看
#define min(x, y) (( \
const typeof(x) _x = (x); \
const typeof(y) _y = (y); \
(void) (&_x == &_y); \
_x < _y ? _x : _y; ))
(void) (&_x == &_y)这句话本身都执行程序来讲完全是一句废话,它的作用在于,本身我们无法做这样的操作typeof(_x)==typeof(_y),所以故意判断他们2个的地址指针是否相等,显然是不可能相等,但是如果_x和_y的类型不一样,其指针类型也会不一样,2个不一样的指针类型进行比较操作,会抛出一个编译警告。也就是说char
*p; int *q; 然后p==q;,这个判断因为一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。
const typeof(x) _x = (x); \
const typeof(y) _y = (y); \
(void) (&_x == &_y); \
_x < _y ? _x : _y; ))
(void) (&_x == &_y)这句话本身都执行程序来讲完全是一句废话,它的作用在于,本身我们无法做这样的操作typeof(_x)==typeof(_y),所以故意判断他们2个的地址指针是否相等,显然是不可能相等,但是如果_x和_y的类型不一样,其指针类型也会不一样,2个不一样的指针类型进行比较操作,会抛出一个编译警告。也就是说char
*p; int *q; 然后p==q;,这个判断因为一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。
相关文章推荐
- js-数据类型,怎么判断是数组?
- 怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32
- Python动态类型,怎么判断是输入数据的合法性?
- 怎么解决asp.net错误:缺少using 指令或程序集引用 找不到类型或命名空间名称StringBuilder&using的用法
- 类型强制转换 And 判断DataRow非空…
- 判断数据类型 python
- 怎么判断一个对象是不是数组类型?
- iOS 怎么实现监听网络断开和链接上,其次是怎么判断网络的类型??????????
- 怎么用jquery判断浏览器类型和版本号?
- void类型指针 && 指针的各种组合
- js怎么判断浏览器类型
- 如何判断对象包含List<T>中的类型
- 我的JavaScript回顾之路_01—0206—++在前在后区别/&&和||/条件判断语句/循环语句的区别/字符串类型数字和数字类型之间的转换
- jquery怎么判断浏览器类型及版本
- 怎么去掉Xcodeproject中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32
- c++中怎么判断一个string类型的字符串变量是否为数字?
- 怎么判断_variant_t的值是什么类型 (转)
- javascript中怎么做对象的类型判断
- php 判断上传文件类型 $_files[]['type']值大全
- Java遍历文件夹&判断是否存在某一类型的文件