首頁>Club>
2
回覆列表
  • 1 # 逆光的背影

    可能很多人都不知道goto語句,這邊我說一下goto語句也稱為無條件轉移語句,就是說沒有條件就可以直接跳到你想跳的那一行程式碼,這樣嚴重的影響了程式按順序執行的流程,會讓程式很混亂。別人看你的程式碼的時候可能都明白為什麼,跳來跳去可能把自己都跳暈了,不助於程式碼的理解,有的時候連除錯程式碼都會很費勁,所以說盡量少用這個goto語句,他會打破平衡的。

  • 2 # IT自動化交流

    MISRA (The Motor Industry Software Reliability Association),中文名稱為汽車工業軟體可靠性聯會,是英國的一個跨國汽車工業協會,其成員包括了大部分歐美汽車生產商。其核心使命是為汽車工業提供服務和協助,幫助廠方開發安全的、高可靠性的嵌入式軟體。MISRA C則是由MISRA提出的針對嵌入式C語言開發標準,目的是提高嵌入式系統的安全性、可讀性和可移植性。

    MISRA C明確規定不能使用goto語句,如下:

    規則14.4(強制) :goto 語句不能使用。

    規則14.5(強制):continue 不能使用。

    規則14.6(強制): 函式應在函式結束有一個出口。

    規則14.7(強制):witch、while do 、while for 語句體應是一個混合語句。

    規則14.10(強制): 所有if else if 結構都應該由 else 結束。

    我想,原因主要為:

    1、二十幾年前,當計算機程式設計尚處於起步階段時,程式流程是由“GOTO”語句來控制。該類語句允許程式設計師對當前程式碼行斷行,而直接進入另一個不同的程式碼段,在程式比較簡單是用goto語句是比較靈活,但是當程式比較複雜時很容易造成程式流程的混亂。

    2、破壞了清晰的程式結構,使程式的可讀性變差,甚至成為不可維護的"麵條程式碼"。

    3、經常帶來錯誤或隱患,比如它可能跳過了某些物件的構造、變數的初始化、重要的計算等語句。

    4、GOTO語句使程式的靜態結構和動態結構不一致,從而使程式難以理解,難以查錯。

    如果確實不可避免需要使用,下列關於使用goto語句的原則可以供參考:

    1) 使用goto語句只能goto到同一函式內,而不能從一個函數里goto到另外一個函數里。  2) 使用goto語句在同一函式內進行goto時,goto的起點應是函式內一段小功能的結束處,goto的目的label處應是函式內另外一段小功能的開始處。  3) 不能從一段複雜的執行狀態中的位置goto到另外一個位置,比如,從多重巢狀的迴圈判斷中跳出去就是不允許的。  4)應該避免像兩個方向跳轉。這樣最容易導致"麵條程式碼"。

  • 3 # 嵌入式大雜燴

    有些人主張用,有些人不主張用。存在即合理,關鍵還是看怎麼用。

    1、不提倡使用goto的理由

    不提倡使用goto的佔比應該比較多,不提倡的原因主要是:很容易把邏輯弄亂且難以理解。

    2、使用goto的理由

    這一部分人認為goto可以用在以下兩種情況比較方便:

    (1)跳出多層迴圈。

    (2)異常處理。

  • 4 # 程式設計師小助手

    天天與程式碼打交道,來說一個。

    本文沒有一句是說程式碼的,可放心閱讀。

    只說感受,感同身受!

    GOTO 與 LABEL只差一步

    這一別,咫尺天涯,各自安好!

    面向過程程式設計

    如C語言,彙編指令,你需要在一個流程中執行動作。

    然後就是封裝起來,匯入標頭檔案,或包,進行引入。功

    能分開,然後還要流程處理,來回跳轉。

    對於編寫程式碼,很便捷,可以來去隨意,讓你自由讓你飛!

    對於除錯程式碼,很痛苦。

    對於維護程式碼,很抓狂。

    對於重構程式碼,很崩潰。

    誰除錯過誰知道,goto被創造出來,提供給開發者使用,是好事情。

    所以,凡是都有一個“最佳實踐”。

    有比較好的程式設計規範,程式設計技巧,偏偏不用。

    明知山有虎,偏向虎山行!

    這種執著,

    暫時坑了隊友,

    長久坑了自身。

    “寫的時候,只有我和上帝知道這段程式碼是幹嘛的。”

    “現在,只有上帝知道!”

    《GOTO毒害史》

    下面是歷史上一些觀點:

    1968年,Edsger Wybe Dijkstra 首先提出“GOTO語句是有害的”論點。在60年代末,70年代初,關於GOTO語句用法的爭論比較激烈。G·加科皮尼和C·波姆從理論上證明了:任何程式都可以用順序、分支和重複結構表示出來。這個結論表明,從高階程式語言中去掉GOTO語句並不影響高階程式語言的程式設計能力,而且編寫的程式的結構更加清晰。

    不加限制地使用GOTO語句,特別是使用往回跳的GOTO語句,

    會使程式結構難於理解,在這種情形,

    應儘量避免使用GOTO語句

    在少數幾個使用範圍較廣的語言中的表現:

    C/C++等高階程式語言中保留了goto語句,但被建議不用或少用。

    Java不提供goto語句,雖然其指定goto作為關鍵字,但不支援使用。Python3提供goto,但其破壞迴圈結構,不推薦使用。PHP5.3+以上提供goto,建議不用。

    上圖是官方提供的餓一個漫畫,說明GOTO的“副作用”!

    高階語言提供goto,供程式設計師使用,

    成就程式的同時,也完全可能埋葬自身。

    如此有爭議,從保守的角度說,

    建議不用!

    如果自己寫工具,自己用,自己調,冷暖自知,GO AHEAD!

    如果團隊協作,向倉庫提交,不用,可以讓你省心不少,GIVE UP!

    以上。

  • 5 # 繁星落石

    因為不安全。

    goto相當於破壞了程式整體的執行順序,透過標籤來決定跳轉的位置,而且跳轉前不會執行檢查,一旦跳轉的內容有問題,可能會導致整個系統的bug。

    不過很多C和彙編開發者很喜歡使用goto語句來執行一些異常處理的操作,因為比較方便而且不會讓程式的架構看起來很混亂。在其它語言裡已經不支援goto的用法了,不過只是針對錯誤處理的話,透過捕獲異常可以實現一些情況下的處理。

  • 6 # 國安課堂

    說實話,我還真沒用過goto, 一般是使用判斷

    goto 語句寫完,你還知道這個程式怎麼執行的嗎?

    goto之後的語句還要執行嗎?如果要執行,還得goto回來,如果不要執行,寫他幹嘛?

  • 7 # 中原說教育

    個人認為不主張用goto語句的原因如下:

    1.使用goto語句後程序出錯後,不好排查錯誤點。

    2. goto

    語句是跳躍式的執行,會使得程式原本的結構遭到破壞。

    3. goto語句會使得程式的邏輯混亂,不易於閱讀

  • 8 # 觀上靈雲

    如果程式碼不太長,用GOTO是非常簡潔直觀。

    但是程式碼一旦長起來,除錯程式的時候找跳轉點就困難了。特別是模組化之後,一旦直接跳出模組很容易把返回點漏了,程式就會產生莫名其妙的問題。

    如果是用目標程式設計,那就更麻煩了。

    所以為了避免出現這個問題,對很多剛入門程式設計師基本不建議用GOTO語句。

    在一個模組內使用goto語句還是很爽的,就是別忘了無論如何都別直接跳出模組去。

  • 中秋節和大豐收的關聯?
  • 奧特曼中如果怪獸獲得了五行能力會怎麼樣?