免费注册 查看新帖 |

Chinaunix

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

[函数] 请大家看看这个函数究竟能找出几个错误 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
41 [报告]
发表于 2006-06-16 08:52 |只看该作者
原帖由 converse 于 2006-6-15 22:39 发表


这样防止赋值,当然了,当你想到这么写的时候也许就不会犯赋值的错误了,只是习惯罢了。



也可以不这样写.

用gcc的话 加上-Wall 参数编译,会给个警告的.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
42 [报告]
发表于 2006-06-16 08:53 |只看该作者
原帖由 飞灰橙 于 2006-6-15 21:09 发表


类似的有不少,做不做,其实仁者见仁:
1. 定义指针是不忘赋空值
   char *p = NULL;
2. free以后指针置空
   free (p);
    p = NULL;
3. 即时一句话的if也加上花括号
   if ( a == b )
    {
     ...

你刚才列的这三条,
除了第 3 条之外,前两条都是扯淡。
不仅不是好习惯,而且还是坏习惯,
比那个把常量写左边的习惯还要坏---把常量写左边只是可读性差了一点,倒还不至于误导人。

论坛徽章:
0
43 [报告]
发表于 2006-06-16 08:55 |只看该作者
原帖由 lenovo 于 2006-6-15 23:18 发表

以前也这样写,
可感觉看起来不爽,又回去了。

确实呀,严重地影响思路。以前在学校论坛上被人用这个教训了之后决定尝试一下,结果还是决定放弃。写成 if (NULL == fp) 这样,每次看到这种代码大脑都得运转一会才能搞清楚怎么回事... 或许是我天资不好,过于愚钝?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
44 [报告]
发表于 2006-06-16 09:21 |只看该作者
原帖由 isjfk 于 2006-6-16 08:55 发表

或许是我天资不好,过于愚钝?

不必难过,正常人都这样,
只有那些读过博士的比如林锐之流,脑袋才会变成这样,
一班人看了 NULL == fp 没有不头晕的。

论坛徽章:
0
45 [报告]
发表于 2006-06-16 09:21 |只看该作者
原帖由 flw 于 2006-6-16 08:53 发表

你刚才列的这三条,
除了第 3 条之外,前两条都是扯淡。
不仅不是好习惯,而且还是坏习惯,
比那个把常量写左边的习惯还要坏---把常量写左边只是可读性差了一点,倒还不至于误导人。


第一条我认为不必要。只要在使用前赋空即可。

第二个呢?我感觉是可以的。至少对哪些不明白指针但还得干活的人是个重要的内容,至少出错可以方便的查找。

if(NULL==FP)这样写也是让哪些不明白但还得干活的人给个强制规定,好像并不是所有的编译器都支持-Wall.

论坛徽章:
0
46 [报告]
发表于 2006-06-16 09:22 |只看该作者
原帖由 flw 于 2006-6-16 08:53 发表

你刚才列的这三条,
除了第 3 条之外,前两条都是扯淡。
不仅不是好习惯,而且还是坏习惯,
比那个把常量写左边的习惯还要坏---把常量写左边只是可读性差了一点,倒还不至于误导人。


发兄,第三条也是扯谈:
多加一个{}, 无非是怕if后面跟的是宏定义,宏定义展开后出问题。
那不是if的错,是宏定义没写好。

论坛徽章:
0
47 [报告]
发表于 2006-06-16 09:23 |只看该作者
没见到代码阿

论坛徽章:
0
48 [报告]
发表于 2006-06-16 09:24 |只看该作者
原帖由 flw 于 2006-6-16 09:21 发表

不必难过,正常人都这样,
只有那些读过博士的比如林锐之流,脑袋才会变成这样,
一班人看了 NULL == fp 没有不头晕的。


林锐的有些提法还是很中肯的,
就是有点矫枉过正的说。

论坛徽章:
0
49 [报告]
发表于 2006-06-16 09:24 |只看该作者
NULL == fp

好像在某个外文编码规范指南类的书中出现过。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
50 [报告]
发表于 2006-06-16 09:25 |只看该作者
原帖由 njmpop 于 2006-6-16 09:21 发表

第一条我认为不必要。只要在使用前赋空即可。

使用前赋空?
不明白。
难道要这样:---------?
  1. FILE *fp;

  2. fp = NULL;
  3. fp = fopen( ... ):
  4. if ( NULL == fp ){
  5. ..
复制代码

这还是程序吗?

第二个呢?我感觉是可以的。至少对哪些不明白指针但还得干活的人是个重要的内容,至少出错可以方便的查找。

不明白不要紧,可以学嘛,但是这样子可以让那些不明白的人“好像”是明白了,“好像”是学会了,其实明白的都是错的,学到的也是错的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP