2014-02-28 61 views
0

如果文件無法打開,我正在使用C++ void函數中的exit。這是否是一個好習慣?在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(); 
     } 
} 
+3

我會說這是非常糟糕的做法。我建議返回一個值來表示成功或失敗。 **如果**不可能拋出異常。 –

+0

另外,如果由於無法打開文件而確實必須退出,則退出代碼應該大於零。 – Brian

+3

非常不好的做法,但您至少應該使用非零退出代碼來表示失敗。 – Csq

回答

3

一般來說,可重複使用的功能不應該中止或除非你知道來電者將無法處理失敗以任何合理的方式退出程序。否則,由於呼叫者可能處理的故障,呼叫者退出是「粗魯」的。

例如,查找給定文件的函數可能會失敗,因爲文件不存在,但可能該文件是可選的(例如,緩存文件),在這種情況下,失敗對調用者無害。

而不是退出,請考慮返回錯誤代碼或拋出異常。

5

這將結束該程序,如果調用者可能能夠處理該錯誤並繼續,則該程序有點苛刻。退出零(表示成功)是一個非常糟糕的主意。

在C++中報告錯誤的常用方法是引發異常。然後調用者可以選擇是否處理它,或者是否忽略它,並可能終止程序。

1

如果您選擇使用退出,你將要使用0以外的東西,比如

exit(1); 

關於這個的好處是,一個腳本中調用您的程序可以與迴流容易檢測到錯誤碼。

1

如果您打算編寫其他人將使用的代碼,使用exit()並不是一個好習慣。更糟糕的是,它可能會給您的客戶或用戶羣帶來很多麻煩。

案例:前段時間有一個商業數據庫庫,當出現問題時採取了退出應用程序的方法。毋庸置疑,圖書館的用戶抱怨很多,作者對此表現出的傲慢基本上使他們對用戶產生了不滿。

底線是,它不應該由你(圖書館作者)決定從正在運行的程序下拉出地毯,因爲你覺得錯誤是嚴重的。而是返回一個錯誤或拋出異常。

相關問題