在我们编程的时候,一定要注意对参数、返回值、变量等进行检查和错误处理。否则你将会对其付出血的代价,比如我的误删事件。
参数:对参数进行有效性验证,这一点很重要,一个错误的参数可能会导致问题的出现,一定要验证参数是否为正确参数范围内。但这一点我们经常会遗忘,或者不确定参数的有效范围是什么。
返回值:对返回值验证函数是否执行成功,程序是否可继续执行,最重要是我们拿的到返回值是否是有效的返回值,我们经常拿一个错误的返回值,进行相关操作,比如返回的句柄是否为一个有效句柄。如果我们不验证的话,一个无效的句柄可能会导致程序的奔溃。验证返回值的有效性同样是我们经常遗忘的事情。如果你确定他会成功。请使用assert()。
程序中许多API都是只返回是否成功,都没有说明为什么失败,可以调用GetLastError(),函数将返回32位错误码。我们可以通过,VS自带的Error Lookup来查看错误码的解释,或者到WinError.h中去自行查看。在调试时,我喜欢监视@err,hr它也返回错误代码,这样能够在调试时发现哪条语句出现问题。
有一点需要注意,GetLastError()和@err,hr都是对上一条语句的错误代码,再执行下一条语句的时候,错误代码可能会发生改变,所以要针对语句,及时查看。
利用FormatMessage()函数可以将错误码变为错误信息,返回给用户。
变量的验证很重要,历史总是惊人的相似。
——以上总结于《Windows核心编程 第五版》第一章