C 函数错误:中止该函数还是直接退出程序更好?

med*_*le1 1 c error-handling error-code

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

ABORTING: 基本上我的意思是返回一个错误代码(将在 .h 文件中声明,可能使用它自己的perror()类似函数)并中止该函数,明显的优点是它可以帮助用户执行错误- 处理,但缺点是:

  • 如果函数每次执行后都没有检查错误,而确实发生了错误,那么随着程序的进行,可能会出现很大的问题,用户也很难找到问题的根源。
  • 通过头文件查找错误代码可能既困难又烦人。
  • 错误代码可能与其他库中的错误代码或内置 C 错误代码冲突。

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

Eug*_*Sh. 5

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

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

根据系统性质,您可能想要放宽或收紧上述分类。

  • @hek2mgl出了什么问题,什么不是选项,您正在谈论哪个库函数,它将*突然退出主程序*?您确定您正确阅读了我的答案吗? (2认同)