【问题标题】:Is it good practice to use exit in void function for error?在 void 函数中使用 exit 来解决错误是一种好习惯吗?
【发布时间】:2014-02-28 02:14:46
【问题描述】:

如果文件无法打开,我在 C++ void 函数中使用 exit。这样做是个好习惯吗?

 void ReadData()
 {
      ofstream myfile ("example.txt");
      if (! myfile.is_open())
      {
            cout << "Unable to open file";
            exit(0);
      }
      else {
            myfile << "This is a line.\n";
            myfile << "This is another line.\n";
            myfile.close();
      }
 }

【问题讨论】:

  • 我会说这是非常糟糕的做法。我建议返回一个值来指示成功或失败。 如果那不可能抛出异常。
  • 另外,如果确实因为无法打开文件而必须退出,退出码应该大于零。
  • 非常糟糕的做法,但您至少应该使用非零退出代码来表示失败。
  • 这里如何抛出异常?
  • @CaptainObvlious:我建议抛出异常。返回值可以忽略。

标签: c++ exit


【解决方案1】:

这将结束程序,如果调用者可能能够处理错误并继续,这有点苛刻。以零退出(表示成功)是一个非常糟糕的主意。

在 C++ 中报告错误的常用方法是抛出异常。然后调用者可以选择是否处理它,或者是否忽略它并可能终止程序。

【讨论】:

    【解决方案2】:

    通常,可重用函数不应中止或退出程序,除非您知道调用者将无法以任何合理的方式处理故障。否则,由于调用者可以处理的故障而退出,对调用者来说是“粗鲁的”。

    例如,查找给定文件的函数可能会失败,因为该文件不存在,但该文件可能是可选的(例如缓存文件),在这种情况下,失败对调用者无害。

    与其退出,不如考虑返回错误代码或抛出异常。

    【讨论】:

      【解决方案3】:

      如果你选择使用exit,你会想要使用0以外的东西,比如

      exit(1);
      

      这样做的好处是调用您的程序的脚本可以通过返回码轻松检测到错误。

      【讨论】:

        【解决方案4】:

        如果您打算编写其他人将使用的代码,则使用 exit() 不是一个好习惯。更糟糕的是,它会给您的客户或用户群带来很多麻烦。

        恰当的例子:前段时间有一个商业数据库库采用这种方法,如果出现问题则退出应用程序。不用说,图书馆的用户有很多的抱怨,而作者在这方面表现出的傲慢基本上让他们与用户争吵。

        底线是你(库作者)不应该仅仅因为你觉得错误很严重就决定从正在运行的程序中撤出地毯。而是返回错误或抛出异常。

        【讨论】:

          猜你喜欢
          • 2015-02-18
          • 2020-04-24
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 2016-12-11
          • 2018-07-29
          • 2021-04-27
          相关资源
          最近更新 更多