在无效函数中使用退出来纠正错误是否是一种好的做法



如果文件无法打开C++我在void函数中使用退出。这样做是好的做法吗?

 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();
      }
 }

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

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

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

例如,

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

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

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

exit(1);

这样做的好处是,调用程序的脚本可以使用返回代码轻松检测错误。

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

举个例子:前段时间有一个商业数据库库,它采用了这种在出现问题时退出应用程序的方法。 不用说,图书馆的用户有很多抱怨,作者对此表现出的傲慢基本上使他们与用户处于困境。

底线是,不应该由你(库作者)决定从正在运行的程序下拉出地毯,只是因为你觉得错误很严重。 而是返回错误或引发异常。

最新更新