Re: [問卦] C語言沒人用goto?已回收

看板Gossiping作者 (啃)時間6年前 (2017/12/18 14:03), 6年前編輯推噓8(10215)
留言27則, 19人參與, 6年前最新討論串5/6 (看更多)
這文有點久 講下本人經驗 若你代碼 有很多初始化與階斷性處理 那就用goto吧 ex: 狀態 搖桿已初始 = 否; void 搖桿驅動初始化() { if(無== 確認裝置是否存在()) goto 搖桿無效; if(是 == 搖桿是否太小()) goto 搖桿無效; if(無 == 有無庫存()) goto 搖桿無效; if(失敗 == 啟用電腦()) goto 搖桿無效; if(找不到 == 尋找日本片()) goto 關閉電腦; if(是 == 有無穿褲()) 脫褲(); if(痛 == 稍摸搖桿()) { /* 嚴重錯誤 直接跳出 */ return; } /*初始化已完成*/ 搖桿已初始 = 是; return; 關閉電腦: 關電腦() ; 搖桿無效: 搖桿已初始 = 否; return; } 若是真的不想用goto 也可以用do while(0); void 搖桿驅動初始化() { do { if(無== 確認裝置是否存在()) break; if(是 == 搖桿是否太小()) break; if(無 == 有無庫存()) break; if(失敗 == 啟用電腦()) break; if(找不到 == 尋找日本片()) break; if(是 == 有無穿褲()) 脫褲(); /*初始化已完成*/ 搖桿已初始 = 是; return; }while(0); if(是 == 電腦已開啟()) 關電腦(); 搖桿已初始 = 否; return; } 用do while(0) 不會比較好 只是避開goto爾 簡單講 若是要層層檢查 失敗若要處理一堆 那就大方用下去吧 用goto代碼不會比較難維護 反是用do..while(0)是在裝神弄鬼 ※ 引述《bencert (根本ㄏㄏ)》之銘言: : 小弟我剛剛想起來 : C語言有種用法是goto : 但是上程式設計的課老師也跳過不教 : 我看也沒人用過goto : 有沒有C語言GOTO的八卦? : ----- : Sent from JPTT on my Samsung SM-G930F. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.60.48 ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1513576988.A.940.html ※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:06:17

12/18 14:03, 6年前 , 1F
看搖桿就知道下面是什麼劇情了
12/18 14:03, 1F

12/18 14:04, 6年前 , 2F
沒錯 就是這樣
12/18 14:04, 2F

12/18 14:05, 6年前 , 3F
goto wentto hadgoneto
12/18 14:05, 3F

12/18 14:05, 6年前 , 4F
各種神人
12/18 14:05, 4F

12/18 14:05, 6年前 , 5F
文章都不見了還能回XD
12/18 14:05, 5F

12/18 14:06, 6年前 , 6F
寫程式用goto會被噓吧?
12/18 14:06, 6F

12/18 14:06, 6年前 , 7F
你這篇等很久吼
12/18 14:06, 7F

12/18 14:07, 6年前 , 8F
完全可以拆成 if (搖桿無效嗎 ()) 喔幹();
12/18 14:07, 8F

12/18 14:07, 6年前 , 9F
學校很多老師愛說幹話 goto就是有他好用的地方
12/18 14:07, 9F

12/18 14:07, 6年前 , 10F
判斷式通通塞到 搖桿無效嗎() goto通通改return true
12/18 14:07, 10F
不行 要錯誤處理 好比穿褲 吃藥這類 ※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:08:46

12/18 14:08, 6年前 , 11F
Windows跟Linux kernel一堆goto 要噓?
12/18 14:08, 11F

12/18 14:08, 6年前 , 12F

12/18 14:09, 6年前 , 13F
錯誤處理通通塞到 喔幹()
12/18 14:09, 13F
不同層度的錯誤怎能統一處理? 穿褲與關電腦就完全不一樣啊 ※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:10:03

12/18 14:11, 6年前 , 14F
就用喔幹(int 錯誤類型)啊 何難之有
12/18 14:11, 14F

12/18 14:11, 6年前 , 15F
程式碼優化就禁用GOTO還有return也不能亂用 根本強人所難
12/18 14:11, 15F

12/18 14:13, 6年前 , 16F
Guard Clauses明明就很好用
12/18 14:13, 16F

12/18 14:14, 6年前 , 17F
我是沒路走的時候才會goto
12/18 14:14, 17F
不可能沒路走 我文重點是 do ...while(0) 可以完全取代 goto 只是這樣代碼反變冗 沒意義 ※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:15:37

12/18 14:16, 6年前 , 18F
代碼 ==
12/18 14:16, 18F

12/18 14:17, 6年前 , 19F
可以用 switch ,或把搖桿無效寫成函數,
12/18 14:17, 19F

12/18 14:18, 6年前 , 20F
`goto 搖桿無效;` 變成 `return 搖桿無效();`
12/18 14:18, 20F
冗度大增 比do..while(0) 更慘 ※ 編輯: KILLE (114.136.60.48), 12/18/2017 14:18:54

12/18 14:20, 6年前 , 21F
用goto 最後根本不知道跑到哪
12/18 14:20, 21F

12/18 14:21, 6年前 , 22F
有錯誤就goto 跟檢查完全部錯誤才執行 速度上有差
12/18 14:21, 22F

12/18 14:26, 6年前 , 23F
就跑到最後面,準備離開此函數。不是這種作法就不是goto業務
12/18 14:26, 23F

12/18 14:27, 6年前 , 24F
goto很好用啊. 看人.
12/18 14:27, 24F

12/18 15:04, 6年前 , 25F
你的冗度是指程式碼變很長還是效率變很差?
12/18 15:04, 25F

12/18 15:07, 6年前 , 26F
很典型的goto用法
12/18 15:07, 26F

12/18 15:35, 6年前 , 27F
支那人?
12/18 15:35, 27F
文章代碼(AID): #1QDreSb0 (Gossiping)
討論串 (同標題文章)
文章代碼(AID): #1QDreSb0 (Gossiping)