如果无法打开文件,我在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();
}
}
答案 0 :(得分:5)
这将结束程序,如果调用者可能能够处理错误并继续,则会有点苛刻。退出零(表示成功)是一个非常糟糕的主意。
在C ++中报告错误的常用方法是抛出异常。然后调用者可以选择是否处理它,或者是否忽略它并可能终止该程序。
答案 1 :(得分:3)
通常,可重用函数不应该中止或退出程序,除非您知道调用者无法以任何合理的方式处理失败。否则,由于调用者可以处理的失败,调用者退出是“粗鲁的”。
例如,查找给定文件的函数可能会失败,因为该文件不存在,但文件可能是可选的(例如缓存文件),在这种情况下,失败对调用者无害。
请考虑返回错误代码或抛出异常,而不是退出。
答案 2 :(得分:1)
如果您选择使用退出,则需要使用0以外的其他内容,例如
exit(1);
关于这一点的好处是,调用程序的脚本可以使用返回代码轻松检测到错误。
答案 3 :(得分:1)
如果您打算编写其他人将使用的代码,则使用exit()不是一个好习惯。更糟糕的是,它可能会给您的客户或用户群带来很多麻烦。
例证:前段时间有一个商业数据库库,如果出现问题,采用这种退出应用程序的方法。毋庸置疑,图书馆的用户有很多很多的投诉,作者对此表现出的傲慢态度基本上与他们的用户有关。
最重要的是,你不应该由你(图书馆作者)决定从正在运行的程序中拉出地毯,因为你觉得错误很严重。而是返回错误或抛出异常。