免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: blueprint
打印 上一主题 下一主题

(void)(&x == &y)一问? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-04-21 23:31 |只看该作者
原帖由 lenovo 于 2006-4-21 23:09 发表

很大的代码修改工作量?
不是吧,如果代码符合标准,
应该没那么多吧。



应该还好吧,主要是一些在老版本中不会出警告的写法在新版本中就会出警告,比如著名的“##”问题,^_^

论坛徽章:
0
12 [报告]
发表于 2006-04-22 18:23 |只看该作者
2、如果两个入参类型不同,作者不能保证在这种情况下得到预期的比较结果,于是以一种编译器能够识别的方式“制造”出警告信息。类似于#error的用法。

(void)(&_x == &_y);
是不是说这儿&号不在是平常的取地址符,而是一种特殊标记?

论坛徽章:
0
13 [报告]
发表于 2006-04-22 21:10 |只看该作者
就是取地址符

论坛徽章:
0
14 [报告]
发表于 2006-04-22 23:56 |只看该作者
原帖由 blueprint 于 2006-4-21 21:46 发表
#define min(x,y) ({ \
        typeof(x) _x = (x);        \
        typeof(y) _y = (y);        \
        (void) (&_x == &_y);                \
        _x < _y ? _x : _y; })



还是没有明白 &_x == &_y 在其中的作用,为何要测试这个地址相等?
请指教----

论坛徽章:
0
15 [报告]
发表于 2008-03-13 15:58 |只看该作者
还不是很明白...   (void)(&x == &y); 具有判断功能?

论坛徽章:
0
16 [报告]
发表于 2008-03-14 16:01 |只看该作者
编译的时候给的警告

论坛徽章:
0
17 [报告]
发表于 2008-03-14 23:02 |只看该作者
原帖由 Kallawa 于 2008-3-13 15:58 发表
还不是很明白...   (void)(&x == &y); 具有判断功能?

yes,具有判断功能

(&x == &y);

&x 取变量x地址,转而进化为“取指针类型”的语义,更进而判断 x 类型
同样:&y 取变量 y 地址,转而进化为“取指针类型”的语义,更进而判断 y 类型

所以:  (&x == &y); 主要的作用是: 通过比较两个指针,判断 x 与 y 的类型 是否相等
void 修饰为这条条件表达式是一条完整的C语句。

这条宏的目的是:维护同一类型的变量进行合理判断的完整性
从而让编译器给出警告信息,若不相等时,重新编写代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP