某些 Windows 函数,例如在被调用时CreateFile
可能会返回大量错误代码GetLastError
,并且检查每个可能的错误代码是不切实际的——通常没有足够的文档,并且经常添加新的错误代码。
其中一些(例如访问冲突或无效参数)是由于程序员错误导致的,不应允许程序继续执行。但是,还有一些是由于其他因素造成的,例如文件权限错误、共享违规、文件名错误等,开发人员几乎无法控制。
我想处理所有“非关键”错误(例如错误的文件名),同时允许“关键错误”(例如访问冲突)使我的程序崩溃。
理想情况下,我会说:
// ... an error occurred. Is it a programmer error?
if (IsErrorCritical(GetLastError()))
{
// Yes; raise an exception, crashing the program.
RaiseException(GetLastError(), 0, 0, NULL);
}
当我无法预测每个结果时,如何确定可以安全抑制哪些错误代码(例如,枚举磁盘上的文件时)?