繁体   English   中英

C function 错误:最好中止 function 还是直接退出程序?

[英]C function error: is it better to abort the function or simply exit the program?

标题说明了一切。 由于 C 没有异常,我不确定如何处理错误。 我想到了两者的优缺点:

中止:基本上我的意思是返回一个错误代码(将在 ah 文件中声明,可能带有自己的类似perror()的函数)并中止 function,明显的优势是它可以帮助用户错误处理,但缺点是:

  • 如果 function 在每次执行后都没有检查错误,并且确实发生了错误,那么随着程序的进行,它可能会导致很大的问题,用户将很难找到问题的根源。
  • 查看 header 文件中的错误代码可能会很麻烦而且很烦人。
  • 错误代码可能与其他库中的错误代码或内置的 C 错误代码冲突。

退出程序:不言自明:一旦发现错误,将错误打印到stderr并退出。 这样做的好处是,如果错误消息足够详细,用户将很容易知道他们的代码出了什么问题并修复它,但主要的缺点是用户将无法编写任何可以处理可能发生的错误的代码。错误,而是不得不更改代码本身(当您需要输入或类似的东西时,它会成为一个更大的问题,其中有数百万可能由错误输入引起的错误)。

从该 function 返回正确的错误代码。 否则很难在不同的上下文中使用 function,比如单元测试。 此外,调用程序不可能清理它的资源,或者简单地打印一条错误消息。

这在很大程度上取决于您的程序在做什么。 一些程序(例如简单的命令行实用程序)只会在无效输入时中止,而不会影响用户体验和系统稳定性。 用户将简单地纠正自己并重新运行。 另一方面,如果它是一个安全关键系统,例如军事、医疗或运输设备(例如自动驾驶仪、起搏器等),则中止其程序将导致人员伤亡。 或者按照评论中的建议 - 一个简单的文字处理器。 如果他们在犯了一些愚蠢的错误导致一些程序错误之后失去了所有的工作,用户可能会非常不满意。

因此,编写强大软件的一般方法是将错误分类为致命和非致命。 非致命是您在正常程序运行期间可以预料到的,并且可以以允许程序继续运行的方式优雅地处理。 致命的是由一些异常情况(硬件故障,缺少组件等)导致程序无法继续运行的情况。

根据系统性质,您可能希望放松或收紧上述分类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM