本文共 1254 字,大约阅读时间需要 4 分钟。
错误处理是编程中的一大挑战。很多人对“错误处理”有误解,他们认为它仅限于应对一些特殊情况,比如内存分配失败或函数调用异常。然而,实际上,错误处理是程序的核心 competitiveness,它涉及如何预见系统可能面临的各种异常,并确保程序在这些情况下依然可以稳定地运行。
在构建一个需要高可用性的应用程序时,您需要考虑到系统可能遇到的各种异常。无论是内存耗尽、文件未找到、网络连接中断,还是预期中的成功操作出错,程序都必须有一个完整的错误处理机制来应对这些情况。
此外,错误处理不仅仅是应对失败,还包括如何处理成功的情况。很多人容易忽视这一点,但成功路径同样需要处理,因为它们也可能因系统环境的变化而出现问题。
在编程中,可能会混用不同的API约定,这将导致各种问题。例如:
返回值的不一致性:
Windows API中有些函数返回BOOL
值,而COM函数返回HRESULT
。这种不一致可能导致 programmer混淆。例如,FAILED(Status)
宏会错误地将0
解释为失败。错误信息的不明确性:
有些API不会提供详细的错误信息,只返回错误码。程序员需要通过GetLastError
或类似的函数来获取更多信息。内存分配的问题:
无论是使用HeapAlloc
还是malloc
都需要检查返回的NULL
指针是否有效。检查这一步是程序稳定性的基础。总是检查返回状态:
program在临IFS的任何地方都必须检查返回值。例如,GetWindowsDirectory
返回0
表示失败,而ReadFile
失败后缓冲区可能包含未初始化的值。总是检查内存分配:
无论是使用哪种内存分配函数,都需要确保存在返回的指针。例如,malloc
返回NULL
表示失败,而new
可能在内存耗尽时引发异常。不检查函数返回值
例如:TCHAR cDriveLetter;_getWindowsDirectory(szWindowsDir, MAX_PATH);if (buffer[0] == 0) { // WRONG!!! }
如果GetWindowsDirectory
失败,szWindowsDir
可能是一个未初始化的空字符串,导致cDriveLetter
为负值。
错误处理的做法
应采取以下措施:FAILED(hr)
宏会检查HRESULT
是否为负值。错误处理是程序可靠性的核心。编写高质量代码的程序员必须从一开始就预见各种可能的错误,并设计相应的处理机制。以下几点是成功的关键原则:
只有在错误处理方面下足功夫,才能确保程序在各种异常情况下都能稳定运行。
转载地址:http://zteyk.baihongyu.com/