Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18689426
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-03-20 18:19:52

《C陷阱与缺陷》读书笔记
TY6iH4Dn"H(U    --Jimmy F.Klarke/InfiniteSpace Studio
"x2|6X1wh,rJ wq7@BSD爱好者乐园 W l#Xn-`VN(k7k1@
在遵守以下原则的前提下,任何人都可以转载本文的全部或者部分:
2Df A$K)Hs1. 保留原作者以及出处信息。
\Z/wu%C Hh2. 不修改转载的文字。
)Xi3qQo
,e6d:NZR-u"Ry第一章 词法“陷阱”
M\*Srp2s gY9`c `BSD爱好者乐园[8Z r'U4t2~;DS9[d k
  这一章在我看来有点“预热”的意思,篇幅比较少,讲的也都是很基础的问题。第一节讲的是=和==容易错用的问题。这个也是C里面一个很出名的陷阱了,相信就算是老手,也难免有掉进去的时候。
&c ra-}[;d`m2n  别的我到没什么可说的,不过这让我想起来一个经常会在各种论坛上看到的,试图解决这个问题的方法:在判断语境中把常量放在==的前面。也就是说把带有常量的判断语句写成(1 == n)这样的形式。这样一来,如果不小心把==写成了=,编译器就会报错。
z` T\:}  在我看来,这实在不是一个好的尝试。因为第一,这个方法并不能解决所有的问题,对于两个变量比较的情况,这个方法就完全无能为力。第二,这个方法会带来一种虚假的感, 容易使人放松警惕。而放松警惕则是导致一切本可以避免的问题发生的根源。在我看来,解决这个问题唯一正确的方法就是写代码的时候打起十二分的精神,并且反 复复查代码确定逻辑没有问题。还有就是不要忘了有个lint可以帮你检查出来这些常见的问题,除了前面这种写法解决的情况之外,lint还可以检查出来两 个变量的情况。而且lint还可以检查出来更多其它的问题,比如case后少了break等等,这些都是无法通过简单的编程技巧避免的。BSD爱好者乐园Ct^i6|%p
  这节最后提到的if ((fd = open(argv[1], 0)) < 0),这个经常在书上见到的经典写法,我的建议是把这个表达式拆开,写成:
复制内容到剪贴板
代码:
fd = open(argv[1], 0);BSD爱好者乐园"jihso4b
if (fd < 0) {
8{k0o@9OL9{
阅读(443) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~