3种错误处理 | 优缺点 |
---|---|
返回值函数用返回值来告知调用者是否出错,比如很多Windows的API就是这个类型。其返回值为0表示API调用成功,返回值不为0表示API调用的过程中出错了。微软为不同非零返回值定义了不同意义,可以根据这些返回值判断出错的原因, | 缺点:函数不能直接把计算结果通过返回值赋为其它变量,同时也不能把这个函数算法的结果直接作为参数传递为其它函数。 |
全局变量 | 当发生错误时设置一个全局变量,可以通过调用函数GetLastError分析这个表示错误的全局变量得知出错的原因。 优点:可把计算结果通过返回值赋为其它变量或作为参数传递为其它函数。缺点:调用者很容易忘记检查全局变量,因此在调用出错的时候忘记做相应的错误处理,从而留下安全隐患 |
异常 | 当函数运行出错的时候抛出一个异常,可以根据不同出错的原因定义不同的异常类型。 优点:1,根据异常的类型就能知道出错的原因2,显式划分程序正常运行的代码块(try模块)和处理异常的代码块(catch模块)缺点:当抛出异常时程序执行会打乱正常顺序,对性能有很大影响。 |
补充说明:
GetLastError
- GetLastError返回的值通过在API函数中调用SetLastError或SetLastErrorEx设置。
- 只有在函数调用返回一个错误结果时,这个函数指出的错误结果才是有效的。
- 即使一次GetLastError调用返回的是零值,也不能担保函数已成功执行。
- 通常,只有在函数返回一个错误结果,而且已知函数会设置GetLastError变量的前提下,才应访问GetLastError,这时能保证获得有效的结果。
- SetLastError函数主要在对API函数进行模拟的dll函数中使用
- GetLastError返回的是一个双字节数值(DWORD)。目前win32的出错编号0-11031,Windows(Windows95,以上,Windows NT 3.1以上)已经提供了现成的错误信息处理函数:FormatMessage()。
- FormatMessage是一个Windows API函数。它的功能就是将GetLastError函数得到的错误信息(这个错误信息是数字代号)转化成字符串信息的函数
- GetLastError的出错编号举例:
(0)-操作成功完成。
(1)-功能错误。
(2)- 系统找不到指定的文件。
(3)-系统找不到指定的路径。
(4)-系统无法打开文件。
(5)-拒绝访问。
(6)-句柄无 效。
(7)-存储控制块被损坏。
(8)-存储空间不足,无法处理此命令。
(9)-存储控制块地址无效。
(10)-环境错 误。
(11)-试图加载格式错误的程序。
(12)-访问码无效。
(13)-数据无效。
(14)-存储器不足,无法完成此 操作。
(15)-系统找不到指定的驱动器。
(16)-无法删除目录。
(17)-系统无法将文件移到不同的驱动器。
(18)- 没有更多文件。
(19)-介质受写入保护。
(20)-系统找不到指定的设备。
(21)-设备未就绪…..