用goto做異常處理

2022-05-21 08:51:07 字數 1507 閱讀 1916

今天在csdn上看到的關於錯誤返回值的討論,感覺非常有趣。 從中可以看出被教化的孩子與大神之間的區別...

討論如下: 先放上提問者的源程式: 這是第一種,做出判斷後,如果條件出錯,直接return......

1

int mystrlen(char *str)2

89if (*str == 0)10

1314while(*str != 0)15

19return

count;

20 }

這是第二種,先設定乙個變數,對變數賦值,只有乙個return.....

1

int mystrlen(char *str)2

8else

if (*str == 0)9

12else

1320}21

return

ret;

22 }

這是第三種,使用goto語句:

1

int mystrlen(char *str)29

10if (*str == 0)11

1516

17while(*str !=0)18

2223_ret:

24return

ret;

25 }

就這三種返回方式作出了激烈討論!

從小孩子的觀點來看,我們不應該使用goto語句,因為它破壞了程式結構,這也是我學程式語言以來老師一直說的。書本上也是如是說...

於是他們開始討論第1,2種的優劣。 大多數孩子覺得第1種簡潔,清晰

。第2種方法使函式只有乙個出口。

老鳥們開始發話了: 最好的第3種!對錯誤處理,統一用goto err 跳轉是最方便且效率最高的,從反彙編語句條數可以看出指令用的最少,消耗的暫存器也最少,效率無疑是最高的。並且,使用goto可以使程式變得更加可擴充套件。當程式需要在錯誤處理時釋放資源時,統一到goto處理最方便。

高手另外提到: 幾乎所有的c加密演算法庫,都會巨量的出現goto來處理錯誤 這個討論的確使我受益匪淺!

在以往的程式中,我並沒有用過goto語句,因為思想一直被教條化的教育僵硬著,沒法往goto那想。 所以在很多返回錯誤時都是用return err;

另外,看到有些同學對直接返回與最後才返回有意見。認為直接返回的同學覺得這樣對**多的函式直觀,並舉出萬行**函式的例子。

讀到這裡我笑了...

我瀏覽過《重構》,《clean code》(**整潔之道),對其中提出的寫出讓別人能看懂的**十分有感覺。

乙個上百行的**已經是醜陋的**了。 乙個函式應該只做一件事,這是clean code裡面的基本觀點。 對有實戰經驗的程式設計師與剛出社會血氣方剛的同學來說,這個問題真的能分出水平。

另外,看著這些討論,我覺得自己看了這麼多c/c++的經典書籍還是非常有用的,起碼我懂得基本的「程式設計」。 適當的場景用goto可以極大的提高程式的可讀性,可擴充套件性...

在後來看到《0 bug:c/c++商用工程之道》的時候,更是覺得goto的用處不少。

用goto做異常處理

今天在csdn上看到的關於錯誤返回值的討論,感覺非常有趣。從中可以看出被教化的孩子與大神之間的區別.討論如下 先放上提問者的源程式 這是第一種,做出判斷後,如果條件出錯,直接return.1 int mystrlen char str 2 8 9 if str 0 10 13 14 while st...

批處理命令 goto 和

談起goto,相信大家應該想到的是面向過程程式設計。其實,這就相當於當有人向你談起class,意味著你就懂得物件導向程式設計。如果你不懂,那麼你們的溝通將會很困難。不懂我說的啥意思嗎?請參見曾經分享王路的一篇文章 永遠不要對乙個外行聊你的專業 一般常規的批處理命令,按照自上而下的順序逐行執行,也就是...

三菱goto怎麼用 GOTO語句使用方法

課時 59節課 時長 17.2小時 課級 中級提高 課程從fanuc和廣數系統程式設計基礎講起,僅貼實際生產實踐,適合職業院校教師 企業技術員 學生學習,講解細緻 全面,帶你學習帶你飛。基礎入門篇 主要介紹基本入門知識 工具機座標系 回零操作 工件座標系 對刀操作 圖紙重點的座標值。基礎程式設計 應...