错误后如何结束C程序?

前端之家收集整理的这篇文章主要介绍了错误后如何结束C程序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在重构一个旧代码,我想解决的一个问题是处理错误的方式.我很清楚异常以及它们是如何工作的,但我并不完全确定它们是我正在尝试处理的情况的最佳解决方案.

在这段代码中,如果事情没有验证,那么解开堆栈真的没有理由或优势.我们完成了.尝试保存船只没有意义,因为它是通过Sun Grid Engine并行运行的非交互式代码.用户无法干预.更重要的是,这些验证失败并不真正代表特殊情况.他们是预料之中的.

那我该如何最好地解决这个问题呢?我不确定自己想要的一件事是每个类方法中的退出点都可能失败.这似乎无法维持.我错了吗?在像这样的代码中的失败点调用exit()或abort()是否可以接受?或者我应该一直抛出一个异常回到main中的一些泛型catch语句?有什么好处?

解决方法

抛出一个异常被捕获在main然后退出意味着你的RAII资源对象被清除.在大多数系统中,许多资源类型都不需要这样做.操作系统将清理内存,文件句柄等(虽然我使用的系统无法释放内存意味着它一直被分配,直到系统重启,因此在程序退出时泄漏不是一个好主意.)

但是,您可能希望干净地发布其他资源类型,例如网络或数据库连接,或者您正在驾驶并需要安全关闭的机械设备.如果应用程序使用了很多这样的东西,那么你可能更喜欢抛出一个异常来将堆栈展开回main,然后退出.

因此,适当的退出方法取决于应用程序.如果应用程序知道它是安全的,那么调用_Exit(),abort(),exit()或quickexit()可能是完全合理的. (库代码不应该调用这些,因为显然库不知道它是否对每个将使用该库的应用程序都是安全的.)如果在应用程序退出之前必须执行一些关键的清理但是你知道它是有限的,然后应用程序可以通过atexit()或at_quick_exit()注册清理代码.

所以基本上决定你需要清理什么,记录它,实现它,并尝试确保它经过测试.

原文链接:https://www.f2er.com/c/119105.html

猜你在找的C&C++相关文章