5.1 简介
在前面章节中的练习和习题中,我们已经多次提到了错误处理的相关内容,对于错误你应该已经有了一些初步的认识。在编写程序的时候,错误是不可避免的。当然。最后的程序必须是没有错误的,至少不存在我们不可接受的错误。
错误的分类有很多种,例如,
·编译时错误:由编译器发现的错误。根据所违背的语法规则,编译时错误还可以进一步细分,例如:
·语法错误;
·类型错误。
·链接时错误:当链接器试图将对象文件链接为可执行文件时发现的错误。
·运行时错误:程序运行时发现的错误。运行时错误可以被进一步细分为,
·由计算机(硬件或操作系统)检测出的错误;
·由库(例如标准库)检测出的错误;
·由用户代码检测出的错误。
·逻辑错误:由程序员发现的会导致不正确结果的错误。
理想情况下,程序员的任务是消除所有的错误。但在实际中,这经常是不可行的。事实上,对于一个实际程序来说,如何准确定义“所有错误”都是很困难的。如果我们把一台正在执行程序的计算机的电源线拔掉,那么这会是一种你认为的错误么?在多数情况下,答案显然是否定的。但是,如果我们讨论的是医疗设备的监控程序或者电话交换机的控制程序的话,用户会认为包括程序在内的整个系统出了问题。用户只关心结果,而不关心导致这种情况的原因是计算机断电,还是宇宙射线损坏了存放程序的存储器。因此,问题转化为“我们的程序能够检测到错误么?”除非特别说明,我们会假定你的程序:
1.对于所有合法输入应输出正确结果。
2.对于所有非法输入应输出错误信息。
3.不需要关心硬件故障。
4.不需要关心系统软件故障。
5.发现一个错误后,允许程序终止。
假设3、4和5不成立的程序超出了本书的内容范围。但是,假设1和2是属于程序员的基本专业能力范畴。而培养这种专业能力正是我们的目标之一。即使在实际中,我们不能100%达到理想目标,但它是我们的努力方向。 ...