在void函数中使用exit是错误的好习惯吗?

时间:2014-02-28 02:14:47

标签: c++ exit

如果无法打开文件,我在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();
      }
 }

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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

请考虑返回错误代码或抛出异常,而不是退出。

答案 2 :(得分:1)

如果您选择使用退出,则需要使用0以外的其他内容,例如

exit(1);

关于这一点的好处是,调用程序的脚本可以使用返回代码轻松检测到错误。

答案 3 :(得分:1)

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

例证:前段时间有一个商业数据库库,如果出现问题,采用这种退出应用程序的方法。毋庸置疑,图书馆的用户有很多很多的投诉,作者对此表现出的傲慢态度基本上与他们的用户有关。

最重要的是,你不应该由你(图书馆作者)决定从正在运行的程序中拉出地毯,因为你觉得错误很严重。而是返回错误或抛出异常。