天天看點

《編寫高品質代碼:改善c程式代碼的125個建議》——建議25:盡量避免使用goto語句

本節書摘來自華章計算機《編寫高品質代碼:改善c程式代碼的125個建議》一書中的第3章,建議25,作者:馬 偉 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

自從提倡結構化程式設計以來,goto 語句就成為業界争議最大的語句。不論各家對goto 語句的意見是好是壞,總結前人的經驗,還是應該盡量避免在程式中使用goto語句,其原因主要有以下兩方面。

首先,由于goto 語句可以靈活跳轉,如果不加限制,它的确會破壞結構化設計風格,如下面的示例代碼所示:

很顯然,上面的示例代碼已經能夠說明問題了,随着标簽數量增多,将給代碼的可讀性、可調試性與可維護性帶來一場災難。

其次,若不加限制地使用goto語句,該語句可能跳過變量的初始化、重要的計算等語句,進而給程式帶來災難性的錯誤與潛在的安全隐患,如下面的示例代碼所示:

如上面代碼所示,如果編譯器不能發現此類錯誤,則每用一次goto 語句都可能導緻程式出現災難性的錯誤與潛在的安全隐患。

當然,如果遇到下列情況,goto 語句還是有其自身優勢的。

在上面的代碼中,如果使用break語句,則隻能跳出單層的循環;如果使用return語句,則會跳出整個函數,無法繼續執行其他的代碼。是以,這裡可以使用goto語句。其實,如果陷入很深層次的循環中想要跳出最外層的循環,用 goto 直接跳出比用 break 一層循環一層循環跳出要好得多。

繼續閱讀