第1页共14页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共14页一、诊断错误及其处理防止程序出错的第一关是编译器
如果遇到约束违规的情况或语法错误,编译器至少会生成一个诊断错误信息
大多数编译器将其诊断信息分为两类:错误和警告
语法错误很常见,也较易修改
调试程序时首先要改正的是语法错误,调试本身是一种艺术,是程序中断时试着去修复的一种艺术
糟糕的语法会使编译器混乱,甚至可能达到生成很多错误的程度,程序设计者对这种情况不要大惊小怪,应冷静对待,其实很可能仅仅是由于某一个语句引起的,比如说漏掉了while循环中的一个大括号或语句末尾键入了冒号而非分号等
为此我们应该养成一种习惯,自顶向下的修改方法,每次从错误表的开头开始,一次修改一、二个错误再编译,或许错误就能减少许多甚至全部语法错误
模块化程序设计也有助于程序的排错
调试一个充满连接和转折、全局变量等的程序要比调试一个精心设计的模块化程序困难得多
如果程序分成几个模块,各个模块负责程序的一个专项功能,一旦识别出问题可能所处的模块,就很容易地通过检查源代码方式来发现错误,这种策略也称为分治法,因为如果知道了没有问题之处,几乎等同于知道了问题发生的地方
有时我们也可以忽略警告,但这并非是一种良好的编程习惯,追踪每个警告的原因并认真考虑是否有更稳健的方法编写代码能够帮助编程者编写更好的代码
如果我们只是忽略它,当这些“无害”的警告不断累积到一定程度时,可能面临出现混乱的危险
二、差1错误及其处理在C语言中,一个拥有n个元素的数组,不存在下标为n的元素,其元素下标的允许取值范围为0到n-1
请考察下列一段代码:inta[10],i;for(i=1;i=0)if(x>0)y=1;elsey=-1;然而,这段代码实际上所做的与编程者的愿望相去甚远
原因在于C语言中有这样的规则,else总是与同一对括号内最