2011-06-16 120 views
0

我在使用錯誤代碼而不是異常的C++中的遺留代碼上工作。C++錯誤代碼傳播

在這種情況下,FN A()調用B()它調用C()等等

現在,如果C()返回錯誤,我想在B()本身退出,而不必通過它返回到A()並讓A()處理該錯誤。然而,很少有其他團隊成員具有最重要的功能來執行錯誤處理。現在哪一個會很好?

同樣在後一種情況下,由於我們不夠早退出,所以碰巧存在多個返回語句。不,我沒有聽說過應該避免在函數中多次返回。如果我避免返回,那麼嵌套ifs來處理。

回答

0

我認爲應儘可能在本地處理錯誤。也就是說,如果一個類的方法有足夠的知識來處理錯誤,它應該這樣做。但是,如果處理錯誤si退出程序的方式,我認爲這個標準不適用。在這種情況下,你應該像分析@Als所說的那樣分階段返回,並且只有一個退出點。在其他情況下,儘可能在本地處理錯誤。

0

然而很少有其他團隊成員具有最重要的功能來執行錯誤處理。現在哪一個會很好?

這取決於,例如,如果某些函數需要在其調用的函數失敗時需要清理,那麼您可能希望以分階段的方式返回。

通常要避免多次返回,因爲它會使源代碼不易讀,難以理解。作爲個人選擇,我喜歡將我的功能作爲單一入口點和單個出口點。

0

您不能同時滿足「錯誤代碼傳播」和「單一返回」,至少不是很乾淨。選擇一個並與之共存。

其實我回來了。你可以都有,但你必須使用goto。這就是Linux內核處理錯誤返回的方式。

+0

或者你有嵌套'if'語句的三位:) – duedl0r 2011-06-16 16:16:13

+0

@ duedl0r:我確實說「乾淨」。 ;-) – 2011-06-16 16:19:21