首頁>Club>
我感覺goto蠻好用的啊,想去哪就去哪……
68
回覆列表
  • 1 # 東方阿木

    不是不能用,是要限制使用,goto語句的缺點是可能破壞程式碼的結構性,所以只要自己遵循結構化編碼的原則是可以使用該語句的。

  • 2 # Vincent_Zhang

    goto語句其實是給妖魔化了,不是不能用,而是不要亂用,現在很多工程師認為在有限行數內使用goto語句,而且不影響閱讀的前提下是沒問題的。goto語句濫用的問題主要是從組合語言的jmp跳轉命令來的,你可以想象一下,當你閱讀一段程式碼的時候,讀到第五行突然讓你跳轉到第200行,然後又突然跳轉到第30行,很顯然會擾亂你閱讀的思路,而且這種方式也不利於模組化。

  • 3 # 正義鍵盤俠拉格朗日

    因為會破壞程式的邏輯。goto本質上講是c語言語法不規範的時候從彙編延續來的,但是現在高階語言都是用順序,判斷,迴圈結構,這些就足夠了。。你莫名其妙使用goto,我不會覺得你厲害,我會覺得你神經病吧

  • 4 # 楊文垚

    當你的規模比較龐大的時候你就能體會到goto的強大了,它可以強大到你懷疑人生,自己從哪裡來要去哪裡這個哲學問題會讓你崩潰到讓你想投胎回爐重造。goto一時爽,專案火葬場。被review到你就等著人事找你辦理離職手續。

  • 5 # 三輪新司機

    推薦你去看看Linux kernel原始碼,特別是各種裝置驅動,裡面你能看到大量的goto語句。

    這是個好東西,但用不好會帶來災難性後果,在你真正掌握C語音之前,慎用!

    在你掌握並熟悉了各種C需要的程式設計套路之後,你會發現goto真香[捂臉]

  • 6 # 勇敢的驢子68871537

    我不太熟。記得大學教c的老師說過,如果呼叫一個函式使用goto跳出後,此函式會一直駐留在記憶體中,降低系統效率。不知道是不是這樣的。

  • 7 # young999

    既然語句存在,那麼一定是有用的。比如在引數判斷校驗非常嚴格的場景,每個判斷返回資訊還要給使用者詳細的出錯資訊時,而且要層層關門,關閉之前開啟的資源時,用try和catch不能滿足要求,不用goto,就要return,而大量return在有執行緒鎖時非常危險且邏輯不清晰。用goto加上清晰的label會使程式碼很高效也好看。而且你會發現,函式只有一個唯一的返回語句,方便閱讀和除錯

  • 8 # 使用者愛德華

    goto語句不是不能用,而是使用不當可能會導致大問題。如果封閉在一小段程式中比如某個比較小的函式中,也可以。用if…else…更有邏輯性。如果一段稍長的程式,用了多個goto,正常情形下程式碼的走向可能沒問題,如果出現異常,可能自己都不知道程式走到哪裡去了。

  • 9 # 技術閣

    用啊,幹嘛不用,我調高通的有線驅動和無線驅動裡,原廠用了不知道多少的goto,個人覺得非常好用,特別是對一些異常情況的處理。怕啥?別瞎聽老師的 goto起來。

  • 10 # alasunny

    c之父開發定義語言的時候,goto是為了偷懶,快捷。他的小夥伴大神圈,對這個功能也是讚不絕口。但是~~我們都不是大神啊~~看goto會看到懷疑人生~

  • 11 # 冰點實事評論

    goto label,跳轉到一個已經定義好的標籤處,如果來回的跳轉,程式邏輯流程就會很混亂,跳來跳去,最後不知道跳轉到哪裡,一不小心形成死迴圈,所以,最好別用,破壞程式邏輯

  • 12 # Sudaixin

    程式語言都是線性執行的,一個程式有如多條線構成的一個或多個平面,而goto等於是在平面之外的第三緯度給平面內和平面間拉了多條通路,把二維模型搞成三維模型,對於編寫者、除錯者、閱讀者的複雜度都成幾何級數增加,無疑是一場災難。

  • 13 # 聞雞起舞焚膏繼晷

    c語言裡的goto就相當於開了掛的遊戲,可以為所欲為,一旦濫用,就相當於不受控制的男人,想讓全世界的女人都懷上他的孩子。

    那程式的世界還不亂了套了。

  • 14 # 跟我學微控制器

    談goto色變,主要是goto太自由了,甚至比組合語言的jump更自由,jump還要考慮長地址短地址等跳轉,而goto根本沒有任何限制,他可以直接從函式內部調到函式外部甚至其它函式的位置。這就牽扯到一個問題,我們都知道函式呼叫是保護當前上下文,也是當前執行堆疊和暫存器,一旦進入被呼叫函式的內部,堆疊和暫存器就全變了,如果函式內部再用goto到其它地方函式不再返回,程式肯定就全亂了,而且導致記憶體洩露。所以,使用goto必須要加限制條件1.函式內部goto只能goto到函式內部,保證函式能夠返回到被呼叫的2.中斷內部用goto也是一樣,goto必須要能夠保證中斷正常返回,不然也會導致中斷異常。總結,goto不推薦使用的原因主要是它可以不受任何條件限制,跳轉到你想要去執行的地方,過於自由,但是是好事還是壞事取決於程式開發人員的設計是不是考慮得完善,是不是會導致這樣那樣的問題。

  • 15 # xfwangqiang

    你老師沒怎麼寫過正兒八經的軟體!沒有goto,程式碼還怎麼優雅!除非c啥時候支援try catch,否則不用goto決逼是自找麻煩!

    上面說得太噴子了!說點心裡話,一個健壯的程式,會有大量的異常處理解,c裡沒有異常捕獲,全用if這真的會讓程式碼醜陋不看,goto可以優雅的解決這個問題!

    有人說goto不受限制,太自由而容易出錯,如果我告訴你,這樣一條規則:只能在一個函式內往前goto。你覺得一個能正常寫程式的人會犯錯嗎?

    老有人說只有大神和小白用goto,說後者居多!我想說我十幾年裡就沒有見到過有人用goto寫出來過bug

  • 16 # 蔡孟焦

    我做微控制器的,偶爾也會用用。總體看功能需求,在一個函式,如果一定要處理部分程式碼再退出,然後中間各種判斷,很多退出。可以考慮用

  • 17 # 遁世迷糊人

    跳多了總會跳到坑裡,有分支語句、條件語句,再加上函式封裝。其實goto完全可以用更規範、更嚴謹的使用方法代替。

    for、while有break跳出迴圈體,有continue跳出單次迴圈。函式有return可以跳出函式體。用分塊的思想,寫模組、寫函式、呼叫功能塊、功能塊組合複用。實現跳轉有更多更嚴謹的方法,有些時候其實不怕有條件的跳轉,最怕無條件的隨性跳轉。

    goto很容易破壞程式的結構性,C說到底是結構化正規化的程式設計,要麼就是純粹面向過程。

    如果純粹以教學為目的,不趕時間的話,可以練下三大程式設計正規化和程式設計思想,養成良好的程式設計習慣和風格。這些無關開發,如果是想走架構師方向,需要有這個意識。

    但是如果只是做事的,趕任務且不考慮多人協同程式設計和程式後期維護效率,或者說從開發到維護都是你,那麼程式風格如何、規範如何就不用考慮了,怎麼快怎麼來、怎麼舒服怎麼來。

    你自己寫的程式,大半年不看不接觸,如果重新再拿起維護,卻發現需要一個禮拜以上的時間找原來的思路和感覺,那麼你的程式的程式設計風格和程式編寫規範就有些問題了。當然都是題外話,以程式“開閉原則”即對擴充套件開放對修改閉合的大體原則,如果一個功能塊軟檢過了或者說不會出現問題迴歸測試的話,基本確定沒問題就很少修改。

    所以隨意,但為了方便程式碼長期維護,還是規範一點別太隨性了。

  • 18 # 沙漠滑鼠

    你編一個稍微複雜邏輯的程式,用上多個goto。過一段時間在看程式碼或需求稍微改變,那你就知道了這個goto的厲害了。

  • 19 # 愛思考的奧特曼

    不是不能用,而是說如果用的不恰當,就很容易出現“麵條程式碼”(結構混亂,難以理解)。

    在大學期間學習C的時候,老師講過一個很典型的例子:

    #include <stdio.h>

    void main()

    {

    int a=1,b=2; if(a<b) goto aa; printf("hello"); aa:printf("s"); return 0;}

    輸出結果:s

    將上面的程式碼改一下:

    int a=1,b=2; if(a>b) goto aa; printf("hello"); aa:printf("s"); return 0;

    輸出結果:hellos

    現在發現問題了嗎?aa:將沒有意義

    這就是為什麼要慎用goto語句的原因:goto語句太靈活了,可以不受限制

    goto還是要慎用

    首先,因為goto語句非常靈活,可以無條件跳轉到其他標籤,這就嚴重破壞了程式碼的結構性;其次,goto語句的執行可能會跳過變數的初始化、重要的計算語句等,這將直接影響到整個程式的執行。比方我們上面提到的例子,這些程式碼很簡單,所以找問題時也很容易。但如果是實際專案,面對著幾萬行密密麻麻的程式碼,換誰都得瘋。

    所以我個人建議,除非是精通C語言的大神,否則還是別用goto了吧,老老實實的用while迴圈不好嗎?

  • 20 # 天涯浪子2020

    說實在的,寫程式的人需要超強的邏輯能力,對於邏輯能力差的,什麼goto了,什麼遞迴了,什麼複合語句了……統統不要用

  • 中秋節和大豐收的關聯?
  • 45歲的女人該怎麼跟老公相處,為什麼他總是覺得你在懷疑他?