C专家编程
上QQ阅读APP看书,第一时间看更新

价值2000万美元的Bug

1993年春天,在SunSoft的操作系统开发小组里,我们接到了一个“一级优先”的Bug报告,是一个关于异步I/O库的问题。如果这个Bug不解决,将会使一桩价值2000万美元的硬件产品生意告吹,因为对方需要使用这个库的功能。所以,我们顶着重压寻找这个Bug。经过几次紧张的调试,问题被圈定在下面这条语句上:

x == 2;

这是个录入错误,它的原意是一条赋值语句。但程序员的手指在“=”键上不小心多按了一下。这条语句成了将x与2进行比较,比较的结果是true或者false,然后丢弃这个比较结果。

C语言的表达能力也实在是强,编译器对于“求一个表达式的值,但不使用该值”这样的语句竟然也能接受,并且不发出任何警告,只是简单地把返回结果丢弃。我们不知道是应该为及时找到这个问题的好运气而庆幸,还是应该为这样一个常见的录入错误可能付出高昂的代价而痛心疾首。有些版本的lint程序已经能够检测到这类问题,但人们很容易忽视这些有用的工具。

本书收集了其他许多有益的故事。它记录了许多经验丰富的程序员的智慧,避免读者再走弯路。当你来到一个看上去很熟的地方,却发现许多角落依然陌生,而本书就像是一个细心的向导,帮助你探索这些角落。本书对一些主要话题如声明、数组/指针等做了深入的讨论,同时提供了许多提示和记忆方法。本书从头到尾采用了ANSI C的术语,在必要时会用日常用语来诠释。


 

E:\chenjikang\18\新建文件夹\2.tif 

编程挑战


 


 

E:\chenjikang\18\新建文件夹\4.tif 

小 启 发

例框

我们设置了“编程挑战”这个小栏目,像这样以框的形式出现。

框中会针对你所编写的程序给出一些建议。

另外,我们还设置了“小启发”这个栏目,它也是以框的形式出现的。

“小启发”里出现的是在实际工作中产生一些想法、经验和指导方针。你可以在编程中应用它们。当然,如果你已经有了更好的指导原则,也完全可以不理会它们。