当前位置:嗨网首页>书籍在线阅读

03-错误分类

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

18.1.1 错误分类

我们已经知道, C程序需要经过编译、链接等步骤才能运行,编译器在每个阶段都会有不同的分工,每个阶段检查出来的错误也就不同。根据错误出现的不同阶段,可以将错误分为5类——警告错误、语法错误、链接错误、运行时错误和逻辑错误。其中,警告错误和语法错误是编译阶段检查出来的,链接错误是链接阶段检查出来的,运行时错误是运行程序时检查出来的,而逻辑错误编译器是无法自动检查出来的,这需要调试人员利用调试工具进行检查。

  • 警告错误:这类错误一般不会影响程序的运行,大多数可以忽略。这类错误常见的情况是定义了变量但是并没有使用该变量,或者赋值语句中的类型自动转换,比如,将一个long int型的数据赋给了int型变量可能导致数据的丢弃,因此编译器会给出一个警告。
  • 语法错误:这类错误一般是程序书写错误,编译器能准确给出这类错误所在的行号,程序员可根据提示进行修改。例如,少写了一个花括号,在语句的末尾少写了分号,错写了变量名,少写了一个函数参数等。
  • 链接错误:这类错误是在链接阶段检查出来的。链接就是将程序用到的所有函数和多个文件链接在一起构成可执行文件。这类错误产生的原因往往是程序中调用的函数不存在或找不到相应的函数。例如,如果一个程序包括两个函数,且在一个函数中调用了另一个函数,被调用函数如果没有定义,则在编译阶段并不会出错,它将在链接阶段出错。链接错误可以看作编译器继续深入检查错误的结果。
  • 运行时错误:这类错误是在运行阶段产生的。在没有了语法错误和链接错误之后,运行程序后会显示运行结果窗口。如果程序中存在指针指向错误、除以0错误等,则在运行到程序的某一行发现错误时就会检查出一个内存错误异常,程序终止执行。这类错误只有在程序运行阶段才能发现,在编译和链接阶段是无法发现的。
  • 逻辑错误:这类错误指程序不存在语法方面的错误,也不存在指针指向等运行时错误,在语法和语用上完全没有问题。这种错误体现在程序员编写的程序不能运行出正确的结果,与正确结果不符。编译器是检查不出这种错误的,这必须由程序员利用编译器单步跟踪调试程序,对一行一行代码进行仔细检查,并且往往还需要程序员熟悉程序代码本身的思想,并仔细分析程序,只有这样才能找出错误所在。例如,要将两个数a与c的和赋给变量b,如果写成b=a,a=c,也符合语法规则,编译器并不会报错。对于这种错误,只有利用编译器的单步跟踪调试工具才能发现。