我寫一個C風格的功能:如何在C++中設計錯誤代碼?
enum {
EFUNC1,
EFUNC2,
}
int func0() {
int err = 0;
if((err=func1())!=0) {
// return err or return EFUNC1
}
if((err=func2())!=0) {
// return err or return EFUNC2
}
return 0;
}
FUNC1和FUNC2是C函數和他們有自己的錯誤代碼。當func1或func2返回錯誤時我該怎麼辦?我想辦法:
設計我的錯誤代碼。錯誤代碼的數量是func1和func2的總和。當調用堆棧較深時,錯誤代碼的數量變大。
只需返回func1或func2的結果。由於錯誤代碼可能重疊,因此無法知道哪個功能失敗。
設計我的錯誤代碼和代碼的數量等於函數的數量。調用者只知道哪個函數返回錯誤,但他不知道進一步的原因。
拋出包含失敗函數名稱及其錯誤代碼的異常。
最佳做法是什麼?
上面的代碼示例不明確。我修改了它。
你的想法是有點瑕疵。調用'func1'和'func2'是'func0'的一個實現細節。您不應該報告哪個功能失敗,而是**爲什麼發生故障**。這是強大的,更好的做法。這樣,沒有人需要深入調用圖表來了解錯誤。 – StoryTeller
如果'func1()'失敗並且需要向調用者報告錯誤,那麼爲什麼你甚至試圖調用'func2'? – user463035818
@ tobi303示例不完整。我只是表明func0會調用func1和func2。我沒有添加任何錯誤處理代碼。 – CppLucifer