13.3 其他错误处理方法
优质
小牛编辑
130浏览
2023-12-01
- 用 assert 测试编码和设计错误。如果其返回false,则程序终止,应纠正代码。这种方法在调试时很有用处。
- 忽略异常,这不适合公开发布的软件产品和任务关键的专用软件。但自用软件通常可以忽略许多错误。
退出程序,使程序无法运行完毕或产生错误结果。实际上,对于许多错误类型,这是个好办法,特别是对于能让程序运行完毕的非致命错误,因为让程序运行完毕很可能使程序员误以为程序工作很顺利。这种方法也不适合任何任务关键的应用程序。资源问题也很重要,如果程序取得资源,则应先正常返回资源之后再终止。
常见编程错误13.2
退出程序会使其他程序无法使用其资源,从而造成资源泄漏。
- 设置一些错误指示符。这里的问题是程序不一定在发生错误的所有地方都检查这些错误指示符。
- 测试错误条件、发出错误消息和调用 exit,向程序环境传递相应的错误代码。
- setjump 和 longjump。这个功能通过 <seljmp.h> 实现,可以指定从深层嵌套函数立即转入错误处理器。如果没有setjump/longjump,则程序要执行几个返回才能从深层嵌套函数退出。这种方法可以转入某个错误处理器。但其在 C++ 中有危险性,因为其解退堆栈而不调用自动对象的析构函数,从而可能造成严重问题。
- 某些特定错误有专门的处理功能。例如,new无法分配内存时,可以用 new_handler 函数处理错误。通过提供函数名作为 set_new_handler 的参数可以改变这个函数。13.14 节将介绍 set_new_handler。