《C陷阱与缺陷》读书笔记
TY6iH4Dn"H(U --Jimmy F.Klarke/InfiniteSpace Studio
"x2|6X1wh,rJ
wq7@BSD爱好者乐园
Wl#Xn-`VN(k7k1@在遵守以下原则的前提下,任何人都可以转载本文的全部或者部分:
2Df A$K)Hs1. 保留原作者以及出处信息。
\Z/wu%CHh2. 不修改转载的文字。
)Xi3qQo,e6d:NZR-u"Ry第一章 词法“陷阱”
M\*Srp2sgY9`c `BSD爱好者乐园[8Zr'U4t2~;DS9[d k 这一章在我看来有点“预热”的意思,篇幅比较少,讲的也都是很基础的问题。第一节讲的是=和==容易错用的问题。这个也是C里面一个很出名的陷阱了,相信就算是老手,也难免有掉进去的时候。
&cra-}[;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) |