C++程序的4种错误(新手必看)
实际开发中,无论程序员经验多么丰富,都不可避免地会出现一些程序错误。
应用程序可能遇到的错误类型主要有 4 种,分别是语法错误、连接错误、运行时错误和逻辑错误。这些错误中的大多数都发生在 C++ 源程序向可执行程序转化的过程中。另外,在程序编译的过程中由于要建立的可执行文件版本不同(调试版本和发行版本),也可能出现一些错误。
当编译器将源代码翻译为可以在计算机上运行的可执行程序时,编译器会定位和报告所有的语法错误,并对合法但在以后可能引起错误的潜在问题给出警告。
编译器可以报告声明但从未使用过的变量和在初始化之前对变量的使用,甚至可以指出产生的逻辑流程将禁止某些代码段被执行,这种问题被标记为 unreachable code(不可到达的代码)。
例如,在编写代码时最常使用的字符串输出功能:
遗憾的是,有些初学编程的人根本不看编译器提示的信息,而是花费大量时间自行查找程序出错的原因,耗时费力。有经验的程序员在看到编译器提示的信息后,会立刻修正程序中的错误。
对于程序中出现的语法错误,双击错误提示,代码中就会自动标记发生错误的位置。有时,发生错误的代码不是标记的那句代码,而是在标记代码的附近,可能是标记这句代码的上一行,仔细检查即可。
连接错误与其他的错误类型在本质上是有区别的,语法错误是由于违反语法规则产生的,连接错误是由于在编译可执行文件时缺少外部链接文件产生的。
例如,除数为 0、内存分配失败、数组越界、文件不存在等问题,都会导致程序运行时错误。这些错误如果不能发现并加以处理,很可能会导致程序崩溃。
解决运行时错误的最佳方法就是用好 C++ 异常处理机制。
编译器无法捕获逻辑错误,用户通常在看到错误结果或程序终止时才能发现问题,而且很难确定是哪一处代码出现了错误。
通过代码调试可以解决逻辑错误。这里介绍两种常用的逻辑错误处理方法:
注意,逻辑错误和运行时错误最普遍,也最容易发生。当程序出现错误时,首先要判断是逻辑错误还是运行时错误,再选择适当的调试方法或异常处理方法,找到并纠正错误。
应用程序可能遇到的错误类型主要有 4 种,分别是语法错误、连接错误、运行时错误和逻辑错误。这些错误中的大多数都发生在 C++ 源程序向可执行程序转化的过程中。另外,在程序编译的过程中由于要建立的可执行文件版本不同(调试版本和发行版本),也可能出现一些错误。
C++语法错误
语法错误是指在编写程序代码时由于违反 C++ 的语法规则而产生的错误,一旦违反了语法规则,在程序进行编译时开发工具会提示此类编译出错的信息。当编译器将源代码翻译为可以在计算机上运行的可执行程序时,编译器会定位和报告所有的语法错误,并对合法但在以后可能引起错误的潜在问题给出警告。
编译器可以报告声明但从未使用过的变量和在初始化之前对变量的使用,甚至可以指出产生的逻辑流程将禁止某些代码段被执行,这种问题被标记为 unreachable code(不可到达的代码)。
例如,在编写代码时最常使用的字符串输出功能:
#include<stdio.h> int main(int argc, char *argv[]) { printf("Hello World!\n") printf("大家好!"); return 0; }编译上面的代码,系统将提示如下错误信息:
C:\Users\xxx\demo.cpp [Error] expected ';' before 'printf'
上面的提示信息中,明确地指出在 printf 语句中缺少“;”。遗憾的是,有些初学编程的人根本不看编译器提示的信息,而是花费大量时间自行查找程序出错的原因,耗时费力。有经验的程序员在看到编译器提示的信息后,会立刻修正程序中的错误。
对于程序中出现的语法错误,双击错误提示,代码中就会自动标记发生错误的位置。有时,发生错误的代码不是标记的那句代码,而是在标记代码的附近,可能是标记这句代码的上一行,仔细检查即可。
C++连接错误
出现连接错误,最常见的一种情况是在使用动态链接库(DLL)时,虽然已对 lib 文件进行了载入,但 lib 文件与动态链接库所在的位置和可执行文件并不在同一个目录下。连接错误与其他的错误类型在本质上是有区别的,语法错误是由于违反语法规则产生的,连接错误是由于在编译可执行文件时缺少外部链接文件产生的。
C++运行时错误
运行时错误并不在程序编译时产生,而是在编译未出现任何错误提示的情况下,在程序运行时发生。例如,除数为 0、内存分配失败、数组越界、文件不存在等问题,都会导致程序运行时错误。这些错误如果不能发现并加以处理,很可能会导致程序崩溃。
解决运行时错误的最佳方法就是用好 C++ 异常处理机制。
C++逻辑错误
逻辑错误是最难处理的一种错误类型,错误的原因通常是对某一问题解决方案的错误理解。简而言之,就是代码思路有问题,无法实现最终目标。编译器无法捕获逻辑错误,用户通常在看到错误结果或程序终止时才能发现问题,而且很难确定是哪一处代码出现了错误。
通过代码调试可以解决逻辑错误。这里介绍两种常用的逻辑错误处理方法:
- 利用调试器设置断点,并跟踪程序执行的每条语句。在跟踪的同时对程序中的变量值进行验证,查看程序出现逻辑错误的位置;
- 利用字符串输出语句,在程序中需要输出验证信息的位置将变量值以字符串的形式输出,这样就可以很快查看程序中出现逻辑错误的位置。
注意,逻辑错误和运行时错误最普遍,也最容易发生。当程序出现错误时,首先要判断是逻辑错误还是运行时错误,再选择适当的调试方法或异常处理方法,找到并纠正错误。