[問題] 關於goto的使用,想聽聽各位的意見

看板C_and_CPP作者 (天草)時間15年前 (2009/05/20 10:39), 編輯推噓14(14037)
留言51則, 18人參與, 最新討論串1/1
如題 我想goto的缺點大家一定比我還熟 可讀性變差、狀態不可預期、結構不明確…等的 但是從高中到現在 我遇到的所有教程式設計的老師 一定會教goto 卻一定會禁止我們用goto 如果它真的那麼差的話,怎麼會被留到現在? 事出必有因,我認為一定是goto有它難以取代的好處 所以在此向各位請益 板上是否有人支持goto?而支持使用goto的原因又為何? 且是否在解決什麼問題時,有「非用goto不可」的情形呢? 懇請各位解決我小小的疑惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.128.38

05/20 10:41, , 1F
個人最常看到的用法是C在錯誤發生時跳到尾端回收資源
05/20 10:41, 1F

05/20 10:42, , 2F
但是坦白說能用goto的寫法幾乎都能用另一種寫法代替
05/20 10:42, 2F

05/20 10:42, , 3F
留著的原因之一只是歷史因素罷了
05/20 10:42, 3F

05/20 10:43, , 4F
有時候條件太複雜的時候真的很想用goto....
05/20 10:43, 4F

05/20 10:46, , 5F
if else必須要很多層 用一個goto就出去了XD
05/20 10:46, 5F

05/20 10:49, , 6F
無所謂支不支持吧, 要用就用, 不需要用時也不硬要用
05/20 10:49, 6F

05/20 10:51, , 7F
個人的淺見,用goto沒什麼不好,只是會失去結構的完整性
05/20 10:51, 7F

05/20 10:51, , 8F
同時造成後續維護的困難..(你的程式不見得是自己在維護)
05/20 10:51, 8F

05/20 10:51, , 9F
我認為是能少用就少用啦..學程式到現在我還沒用過goto^^"
05/20 10:51, 9F

05/20 10:53, , 10F
其實在Linux kernel source code還挺容易看到goto的
05/20 10:53, 10F

05/20 10:53, , 11F
它是雙面刃 用得好就很好很強大 用的差就亂七八糟了
05/20 10:53, 11F

05/20 10:54, , 12F
不過如果沒有禁止初學者用的話 通常都不會用得好...
05/20 10:54, 12F

05/20 10:54, , 13F
我這學期當助教 學弟妹就亂用goto當迴圈 被我扣分 XDD
05/20 10:54, 13F

05/20 11:05, , 14F
我從來沒用過goto寫程式過
05/20 11:05, 14F

05/20 11:05, , 15F
寫asm還不是一大堆jmp xdd
05/20 11:05, 15F

05/20 11:21, , 16F
跳多層迴圈出去 GOTO 就很好用阿
05/20 11:21, 16F

05/20 11:27, , 17F
我就是因為從一開始就受到不能用goto的教育,演變成到
05/20 11:27, 17F

05/20 11:28, , 18F
現在,解決問題都是寧願用大量的額外的變數與大量的判
05/20 11:28, 18F

05/20 11:29, , 19F
結果浪費大量的開發時間 (咦)
05/20 11:29, 19F

05/20 11:29, , 20F
斷式去解決,而或許僅一個goto就可以解決?
05/20 11:29, 20F

05/20 11:30, , 21F
這是在最近教朋友寫C時,他非常的愛用goto
05/20 11:30, 21F

05/20 11:31, , 22F
他也知道不能常用,但他說這樣寫程式可以用較為直覺的
05/20 11:31, 22F

05/20 11:32, , 23F
方式,所以我才想到這個問題
05/20 11:32, 23F

05/20 11:33, , 24F
或許"禁止初學者使用",等熟悉了如記憶體配置會發生的
05/20 11:33, 24F

05/20 11:33, , 25F
問題之後,他也可以自己去判斷goto的使用時機
05/20 11:33, 25F

05/20 11:41, , 26F
我會說, 初學者遇到的問題, 總能用比 goto 更好的方法
05/20 11:41, 26F

05/20 11:41, , 27F
去解決. 多層迴圈, 很多時候可以抽取中間的層數為另一
05/20 11:41, 27F

05/20 11:42, , 28F
function, 這樣很多時就能免卻了一堆變數的情況
05/20 11:42, 28F

05/20 11:42, , 29F
況者太多層的迴圈, 根本就是讓人看得頭痛
05/20 11:42, 29F

05/20 11:43, , 30F
叫你的朋友, 把不用 goto 也能寫得游刃有餘, 才去思考
05/20 11:43, 30F

05/20 11:43, , 31F
什麼情況合用 goto 吧.
05/20 11:43, 31F

05/20 12:25, , 32F
以前看bbs的程式碼 常看到goto
05/20 12:25, 32F

05/20 12:26, , 33F
Goto像穿牆的透明人 他可以從任一點進入 任一點離開
05/20 12:26, 33F

05/20 12:27, , 34F
當發生命案時 就算是柯南來也可能找不到兇手是誰
05/20 12:27, 34F

05/20 12:30, , 35F
結構化程式設計重點在於單一進入點 單一出口
05/20 12:30, 35F

05/20 12:31, , 36F
在中間發生命案的話 那肯定是從單一進入點進來的
05/20 12:31, 36F

05/20 12:37, , 37F
還有 你的朋友了解那些背後隱穢的事情
05/20 12:37, 37F

05/20 12:37, , 38F
那請問維護的人呢? 事情如果不像表面寫的那樣
05/20 12:37, 38F

05/20 12:38, , 39F
還得再深一層考慮 那樣的話 維護上就是一堆陷井
05/20 12:38, 39F

05/20 12:39, , 40F
要讓別人看不懂你的程式 或是一改就出錯
05/20 12:39, 40F

05/20 12:39, , 41F
goto是不錯的選擇 XD
05/20 12:39, 41F

05/20 12:58, , 42F
有些書沒教goto 覺得該用就用 有時不用goto可讀性反而差
05/20 12:58, 42F

05/20 13:34, , 43F
我印象中 goto 似乎會造成 compiler 最佳化上的困難?
05/20 13:34, 43F

05/20 13:35, , 44F
不過不太確定就是了 ...
05/20 13:35, 44F

05/20 13:35, , 45F
goto 是很容易造成缺點, 而並非是一定會造成缺點
05/20 13:35, 45F

05/20 13:36, , 46F
濫用往往沒有好下場, 所以很多老師乾脆就深惡痛決的禁制
05/20 13:36, 46F

05/20 14:28, , 47F
如果在function內用 做好測試 當成黑盒子用 其實也不錯
05/20 14:28, 47F

05/20 16:24, , 48F
是不是有一篇論文有證明說不使用GOTO一樣可以寫出來?
05/20 16:24, 48F

05/20 16:28, , 49F
樓上 組與就是一堆goto組合而成的阿
05/20 16:28, 49F

05/20 17:31, , 50F
組語一定需要用到j開頭的
05/20 17:31, 50F

05/21 09:22, , 51F
從沒用過goto +1
05/21 09:22, 51F
文章代碼(AID): #1A4srMb6 (C_and_CPP)