GOTO語句使程序的靜態(tài)結構和動態(tài)結構不一致,從而使程序難以理解,難以查錯。
有人認為GOTO語句使用起來比較靈活,而且有些情形能提高程序的效率。
1974年,D·E·克努斯對于GOTO語句爭論作了全面公正的評述,其基本觀點是:不加限制地使用GOTO語句,特別是使用往回跳的GOTO語句,會使程序結構難于理解,在這種情形,應盡量避免使用GOTO語句。但在另外一些情況下,為了提高程序的效率,同時又不至于破壞程序的良好結構,有控制地使用一些GOTO語句也是必要的。用他的話來說就是:“在有些情形,我主張刪掉GOTO語句;在另外一些情形,則主張引進GOTO語句。”
后來,G·加科皮尼和C·波姆從理論上證明了:任何程序都可以用順序、分支和重復結構表示出來。這個結論表明,從高級程序語言中去掉GOTO語句并不影響高級程序語言的編程能力,而且編寫的程序的結構更加清晰。
goto語句的結果:在C/C++等高級編程語言中保留了goto語句,但被建議不用或少用。在一些更新的高級編程語言,如Java不提供goto語句,它雖然指定goto作為關鍵字,但不支持它的使 用,使程序簡潔易讀;盡管如此后來的c#還是支持goto語句的,goto語句一個好處就是可以保證程序存在唯一的出口,避免了過于龐大的if嵌套。
可以考慮使用goto的情形:
1.從多重循環(huán)中直接跳出 ;
2. 出錯時清除資源;
3.可增加程序的清晰度的情況。
不加限制地使用goto:破壞了清晰的程序結構,使程序的可讀性變差,甚至成為不可維護的"面條代碼"。經(jīng)常帶來錯誤或隱患,比如它可能跳過了某些對象的構造、變量的初始化、重要的計算等語句。
goto語句問題的提出直接推動了結構化程序設計(structured programming)的思想和程序設計方法學的誕生和發(fā)展。結構化程序設計方法引入了工程思想和結構化思想,使大型軟件的開發(fā)和編程都得到了極大的改善。結構化程序設計方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用goto語句。
下列關于使用goto語句的原則可以供讀者參考。
1) 使用goto語句只能goto到同一函數(shù)內(nèi),而不能從一個函數(shù)里goto到另外一個函數(shù)里。
2)使用goto語句在同一函數(shù)內(nèi)進行goto時,goto的起點應是函數(shù)內(nèi)一段小功能的結束處,goto的目的label處應是函數(shù)內(nèi)另外一段小功能的開始處。
3)不能從一段復雜的執(zhí)行狀態(tài)中的位置goto到另外一個位置,比如,從多重嵌套的循環(huán)判斷中跳出去就是不允許的。
4)應該避免像兩個方向跳轉(zhuǎn)。這樣最容易導致"面條代碼"。
|