免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11571 | 回复: 72

C条件表达式与0值比较的问题 [复制链接]

剑击长空 该用户已被删除
发表于 2007-04-06 16:21 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2007-04-06 16:25 |显示全部楼层
原帖由 剑击长空 于 2007-4-6 00:21 发表
今天看了一下C语言大全(第四版),在P44看到这么一行话

if (b != 0) printf("%d\n", a / b);则是冗余且潜在低效的,这不是一种好风格。因为b足以控制if语句,没有必要通过与零比较去测试它。

书 ...


偶觉得 if (b) 好点,少打几个字,也不容易出错,不管b是bool还是int或是指针。

论坛徽章:
0
发表于 2007-04-06 16:32 |显示全部楼层
p != NULL /* 见得多些 */

NULL != p /* 也见过 */


个人观点:
数值型, 我认为一定要写i == 0,i != 0的样子, 这样明确i的特点.
可以宏定义bool变量, 这时候, 直接if (bool) 我觉得合适.
指针感觉还是明确写出NULL好些...当然不写我觉得没有什么..

论坛徽章:
0
发表于 2007-04-06 16:35 |显示全部楼层
我就不明白了,当b是指针的时候也可以这样判断吗?比如malloc申请内存的失败时候不是返回NULL吗?而NULL确不一定是0,请楼上的解惑

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-04-06 17:05 |显示全部楼层
写代码的时候, 不但要考虑效率, 而且要考虑代码的可读性, 可维护性, 以及代码风格的约定等等. 对程序效率影响最大的往往是数据结构和算法的选择, 而不是具体的编码细节, 例如用 if(p) 而不是 if(p == NULL), 等等.

在 C 中, 检测空指针(null pointer)的时候, 用 if(p) 或者 if(p == NULL) 效果都是一样的, 因为空指针在 bool context 中就代表 false. 至于采用哪种写法就看各人习惯(如果是从头开始写的话)或者是代码风格的约定(如果是修改别人的代码).

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-04-06 17:12 |显示全部楼层
原帖由 剑击长空 于 2007-4-6 16:21 发表
还有我在写代码的时候,指针比较习惯这么写if (NULL != p),但是我老大看到了就说我这么写是错的,

你可以请你的老大详细解释下为什么这么写是错误的, 当然前提是 p 是一个指针.
剑击长空 该用户已被删除
发表于 2007-04-06 17:15 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2007-04-06 17:17 |显示全部楼层
原帖由 剑击长空 于 2007-4-6 17:15 发表


MMMIX说的有道理!
但是我们公司同一个人写出来的都是不一样的,在一个函数中有时if (p),有时if (p == NULL),{}括号也是一样
if () {
}

if ()
{
}当一个文件代码量小时,还没什么问题,但是有那么 ...



代码检查, 版本控制做的不好.
剑击长空 该用户已被删除
发表于 2007-04-06 17:19 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2007-04-06 17:21 |显示全部楼层
原帖由 剑击长空 于 2007-4-6 17:15 发表

......
公司有一份编程规范,但几乎没人遵守。搞得维护的人很吃力

这个说的很好啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP