作者dragon0414 (天草)
看板C_and_CPP
標題[問題] 關於goto的使用,想聽聽各位的意見
時間Wed May 20 10:39:17 2009
如題
我想goto的缺點大家一定比我還熟
可讀性變差、狀態不可預期、結構不明確…等的
但是從高中到現在
我遇到的所有教程式設計的老師
一定會教goto
卻一定會禁止我們用goto
如果它真的那麼差的話,怎麼會被留到現在?
事出必有因,我認為一定是goto有它難以取代的好處
所以在此向各位請益
板上是否有人支持goto?而支持使用goto的原因又為何?
且是否在解決什麼問題時,有「非用goto不可」的情形呢?
懇請各位解決我小小的疑惑
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.128.38
1F:推 legnaleurc:個人最常看到的用法是C在錯誤發生時跳到尾端回收資源 05/20 10:41
2F:→ legnaleurc:但是坦白說能用goto的寫法幾乎都能用另一種寫法代替 05/20 10:42
3F:→ legnaleurc:留著的原因之一只是歷史因素罷了 05/20 10:42
4F:推 wa120:有時候條件太複雜的時候真的很想用goto.... 05/20 10:43
5F:→ wa120:if else必須要很多層 用一個goto就出去了XD 05/20 10:46
6F:推 Ebergies:無所謂支不支持吧, 要用就用, 不需要用時也不硬要用 05/20 10:49
7F:推 DRLai:個人的淺見,用goto沒什麼不好,只是會失去結構的完整性 05/20 10:51
8F:→ DRLai:同時造成後續維護的困難..(你的程式不見得是自己在維護) 05/20 10:51
9F:→ DRLai:我認為是能少用就少用啦..學程式到現在我還沒用過goto^^" 05/20 10:51
10F:→ james732:其實在Linux kernel source code還挺容易看到goto的 05/20 10:53
11F:→ james732:它是雙面刃 用得好就很好很強大 用的差就亂七八糟了 05/20 10:53
12F:→ james732:不過如果沒有禁止初學者用的話 通常都不會用得好... 05/20 10:54
13F:→ james732:我這學期當助教 學弟妹就亂用goto當迴圈 被我扣分 XDD 05/20 10:54
14F:→ eva19452002:我從來沒用過goto寫程式過 05/20 11:05
15F:→ ilway25:寫asm還不是一大堆jmp xdd 05/20 11:05
16F:→ netsphere:跳多層迴圈出去 GOTO 就很好用阿 05/20 11:21
17F:→ dragon0414:我就是因為從一開始就受到不能用goto的教育,演變成到 05/20 11:27
18F:→ dragon0414:現在,解決問題都是寧願用大量的額外的變數與大量的判 05/20 11:28
19F:→ Ebergies:結果浪費大量的開發時間 (咦) 05/20 11:29
20F:→ dragon0414:斷式去解決,而或許僅一個goto就可以解決? 05/20 11:29
21F:→ dragon0414:這是在最近教朋友寫C時,他非常的愛用goto 05/20 11:30
22F:→ dragon0414:他也知道不能常用,但他說這樣寫程式可以用較為直覺的 05/20 11:31
23F:→ dragon0414:方式,所以我才想到這個問題 05/20 11:32
24F:→ dragon0414:或許"禁止初學者使用",等熟悉了如記憶體配置會發生的 05/20 11:33
25F:→ dragon0414:問題之後,他也可以自己去判斷goto的使用時機 05/20 11:33
26F:→ adrianshum:我會說, 初學者遇到的問題, 總能用比 goto 更好的方法 05/20 11:41
27F:→ adrianshum:去解決. 多層迴圈, 很多時候可以抽取中間的層數為另一 05/20 11:41
28F:→ adrianshum:function, 這樣很多時就能免卻了一堆變數的情況 05/20 11:42
29F:→ adrianshum:況者太多層的迴圈, 根本就是讓人看得頭痛 05/20 11:42
30F:→ adrianshum:叫你的朋友, 把不用 goto 也能寫得游刃有餘, 才去思考 05/20 11:43
31F:→ adrianshum:什麼情況合用 goto 吧. 05/20 11:43
32F:推 stonehomelaa:以前看bbs的程式碼 常看到goto 05/20 12:25
33F:推 StubbornLin:Goto像穿牆的透明人 他可以從任一點進入 任一點離開 05/20 12:26
34F:→ StubbornLin:當發生命案時 就算是柯南來也可能找不到兇手是誰 05/20 12:27
35F:推 StubbornLin:結構化程式設計重點在於單一進入點 單一出口 05/20 12:30
36F:→ StubbornLin:在中間發生命案的話 那肯定是從單一進入點進來的 05/20 12:31
37F:→ StubbornLin:還有 你的朋友了解那些背後隱穢的事情 05/20 12:37
38F:→ StubbornLin:那請問維護的人呢? 事情如果不像表面寫的那樣 05/20 12:37
39F:→ StubbornLin:還得再深一層考慮 那樣的話 維護上就是一堆陷井 05/20 12:38
40F:→ StubbornLin:要讓別人看不懂你的程式 或是一改就出錯 05/20 12:39
41F:→ StubbornLin:goto是不錯的選擇 XD 05/20 12:39
42F:推 sunkill:有些書沒教goto 覺得該用就用 有時不用goto可讀性反而差 05/20 12:58
43F:推 os653:我印象中 goto 似乎會造成 compiler 最佳化上的困難? 05/20 13:34
44F:→ os653:不過不太確定就是了 ... 05/20 13:35
45F:推 ledia:goto 是很容易造成缺點, 而並非是一定會造成缺點 05/20 13:35
46F:→ ledia:濫用往往沒有好下場, 所以很多老師乾脆就深惡痛決的禁制 05/20 13:36
47F:→ typeotoco:如果在function內用 做好測試 當成黑盒子用 其實也不錯 05/20 14:28
48F:推 herman602:是不是有一篇論文有證明說不使用GOTO一樣可以寫出來? 05/20 16:24
49F:推 wa120:樓上 組與就是一堆goto組合而成的阿 05/20 16:28
50F:推 stonehomelaa:組語一定需要用到j開頭的 05/20 17:31
51F:推 realmojo:從沒用過goto +1 05/21 09:22