免费注册 查看新帖 |

Chinaunix

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

[C] if(i == 0) 跟 if(!i) [复制链接]

论坛徽章:
0
31 [报告]
发表于 2009-01-20 15:58 |只看该作者
if(!i)
不好的地方是   当i为负数的时候   也是真
if只是判断表达式  是为零或者不为零  而不是布尔符

论坛徽章:
0
32 [报告]
发表于 2009-01-20 16:20 |只看该作者

回复 #10 yecheng_110 的帖子

顶。看来看去就是别扭。

论坛徽章:
0
33 [报告]
发表于 2009-01-20 17:08 |只看该作者
原帖由 wwwsq 于 2009-1-18 19:40 发表



看了林锐写的那篇文章吧?中毒了吧?

if (0 == i) 是违反常规逻辑的写法。你在脑子里会怎么读这行代码?

好的写法应该是 if (i == 0),代码的可读性比初级程序员可能会犯的低级错误更重要。

lin ...

怎么说呢。非常不同意你的说法!
很多c style书和c专家编程都强调右值放在左边,防止少写=。
c专家编程的作者以自身例子来说明,就因为少写=,导致他花了1个星期的时间来定位问题。
所以代码的原则是:把错误暴露在编译阶段。
另外那样写可读性差吗?至少我不认为差多少,特别是右值定义成宏。

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
34 [报告]
发表于 2009-01-20 17:20 |只看该作者
应该是一样的吧

论坛徽章:
0
35 [报告]
发表于 2009-01-20 17:41 |只看该作者
无聊

论坛徽章:
0
36 [报告]
发表于 2009-01-20 17:42 |只看该作者
你绝大多数人都偏题了

论坛徽章:
0
37 [报告]
发表于 2009-01-20 18:14 |只看该作者
原帖由 soul_of_moon 于 2009-1-20 17:08 发表

怎么说呢。非常不同意你的说法!
很多c style书和c专家编程都强调右值放在左边,防止少写=。
c专家编程的作者以自身例子来说明,就因为少写=,导致他花了1个星期的时间来定位问题。
所以代码的原则是:把错 ...



不要听那些理论上的“专家”瞎扯,看看事实上成功的项目是怎么写代码的。
所谓“很多c style书和c专家编程”,不过是人云亦云而已。国内写书,你知道的,就是抄来抄去。他们有没有看过多少实际代码,天晓得。

我统计了一下,在MFC的代码里面,“ == NULL”有1879个,而“NULL ==”只有12个。
在libxml2里面,“ == NULL”有47个,而“NULL ==”只有4个。
在lighttpd里面,“ == NULL”有213个,而“NULL ==”只有129个。
在apache里面,“ == NULL”有1070个,而“NULL ==”只有5个。
在coreutils里面,“ == NULL”有420个,而“NULL ==”只有0个。

你可以看到,越成熟的代码,越要写成“== NULL”的方式。coreutils里面都是千锤百炼的代码,里面更是“NULL ==”这样的狗屁代码一次都没出现过。

你认为,是那些国内出书的“专家”厉害,还是写coreutils的大牛厉害?

论坛徽章:
0
38 [报告]
发表于 2009-01-20 18:30 |只看该作者

回复 #37 wwwsq 的帖子

专家喜欢摆理论,理论发表出来他就名利双收了,从来不必考虑现实环境下的意义。
另外我很佩服你,竟然真的去做了这么个统计

论坛徽章:
0
39 [报告]
发表于 2009-01-20 18:38 |只看该作者
0==i 这种方式,确实看起来很别扭,不过确实能够避免少写=号带来的bug。

i==0这种方式,代码可读性可能好点。

相信把i==0这种写成i=0的,大有人在,调试代码确实很头疼。

不过有个经验就是,发现 if(i==0) { ...} else {...} 这里面的 (i==0)分支永远为真而导致程序不正常的时候,差不多都是少写了=号。

论坛徽章:
0
40 [报告]
发表于 2009-01-20 18:46 |只看该作者

回复 #39 samon_fu 的帖子

所以说,规矩向来是给不够熟练的人用的,因为不熟才犯这样的错误,因为不熟才不知道怎么去解决,这个时候还不如列个条条框框让他们遵循,也许问题就这样迎刃而解。
熟练的程序员不需要这样矫枉过正的写法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP