5

某些 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);
}

当我无法预测每个结果时,如何确定可以安全抑制哪些错误代码(例如,枚举磁盘上的文件时)?

4

2 回答 2

4

“关键”取决于您对文件执行的操作。

任何错误代码都可能是由于程序员错误或正在运行的机器上的某些异常情况造成的;我认为这不是错误处理的重要区别。

对于您没有专门处理的错误(“未知”错误),只需假设文件未创建,并处理这种情况。为什么没有创建它并不重要,只要假设它不是并考虑这种情况。根据您的代码正在做什么以及您想在这种情况下付出多少努力,它可能是致命的,也可能不是。

请注意,访问违规不是众所周知的GetLastError()事情,所以我不明白它与您的问题的相关性。

于 2011-11-01T10:23:34.680 回答
3

我认为这真的取决于上下文,一般不可能决定这一点,而是需要根据具体情况决定。

我这么说的原因是有时相同的错误代码会出现在不同的上下文中,所以不是错误代码本身可以用来确定它是否是关键的,而是上下文本身。

于 2011-11-01T10:21:40.250 回答