PTT評價

[問卦] 所以寫程式用goto到底是好還是不好?

看板Gossiping標題[問卦] 所以寫程式用goto到底是好還是不好?作者
nckuff
(nckuff)
時間推噓71 推:73 噓:2 →:89

安安 台嘎豪R 我肥宅

肥宅正在看公司軟體的原始碼啦
為了做例外處理跟區分使用模式
用了一堆goto= =

肥宅半路出家的,第一次看到用goto的程式碼
而且人家goto是用在迴圈裏面 導致goto到的程式碼就像閹割版一樣
明明前面沒有迴圈 後面卻多加了好幾個 }
看的肥宅頭好痛= =

之前聽課就知道goto會寫出義大利麵,
但之前看jserv某一堂課又說
C用到goto是在所難免,用goto做例外處理是常見的作法。

但公司軟體不是goto之後直接exit(1)程式就結束了RR
略過當前處理後 後面還要繼續下一個處理
喔 我快不行惹 看的頭好痛

有沒有C語言大師可以開示一下
到底該不該用GOTO阿= =

U MI U 7+1卦?
SOS

想下班了喇 555555555




--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.87.218.168 (日本)
PTT 網址

maiev 10/04 15:43i go to school by bus. thank you

alwang 10/04 15:44goto就跟大便一樣 人該不該大便?

Mei5566 10/04 15:44寫組語膩

sata1025 10/04 15:44我也想下班 刷一整天PTT好累

zxc2331189 10/04 15:44最後跑得起來就好了吧 誰管你怎麼寫

deann 10/04 15:44好的 GOTO

johnhmj 10/04 15:44幸好我都用 system(" PTT ");

saiya 10/04 15:44會讓你下禮拜看不懂的寫法就不應該

whitefox 10/04 15:44最後翻譯成assembly 一樣是一堆jmp 啊

vup4jp6 10/04 15:44工作就是工作

gsm60kimo 10/04 15:45 用了40年還是 If then else最好用

crazydj 10/04 15:45新手避免用

kissmickey 10/04 15:45看其他同事怎麼寫就怎麼寫

vowpool 10/04 15:45一堆人亂寫一通後很難維護 然後就離職了

k8 10/04 15:46goto只用在跳到function後面,統一做回傳處理

vowpool 10/04 15:46誰接手誰倒楣

knives 10/04 15:46你要會用,而不是亂用阿

Eleganse 10/04 15:47用 用好用滿 這樣 你寫的東西不可取代

Jkyzer 10/04 15:47簡單粗暴幹嘛不用==

kight 10/04 15:47管他能不能用,把程式改到只有你看得懂才

lats 10/04 15:48PM:為什麼這段會卡住,想辦法解決

Eleganse 10/04 15:48如果老闆看你不爽 也不敢對你不禮貌

lats 10/04 15:48由是就有了GoTo

kight 10/04 15:48才重要,才能彰顯你的價值。

Eleganse 10/04 15:48等下你不領薪憑空消失 整間公司打掉重來

hcwang1126 10/04 15:48goto exit

mnxzq 10/04 15:49goto拿來break多層loop很爽

Eleganse 10/04 15:49沒經驗就不要用了 會讓你寫出爛程式

Eleganse 10/04 15:50有經驗之後 用好用滿 理由很明顯

pshuang 10/04 15:50python 沒 goto 真的累

botnet 10/04 15:50我不太用耶

botnet 10/04 15:51Break比較常用

Eleganse 10/04 15:52是說 能夠寫出一段需要GOTO才能破繭而出

Eleganse 10/04 15:52這原先的寫法就很值得討論了 錯不在goto

phina005 10/04 15:55爽用就用,負責維護的人,你家的事

bitcch 10/04 15:55組語裡面一堆goto啊

easonli000 10/04 15:56只要別人看得懂你在寫什麼就好

yesyesyesyes 10/04 15:56盡量不要 會坑到後面維護的人

kight 10/04 15:56不是喔,是要想辦法讓別人看不懂在寫什麼。

tyantmf 10/04 15:57盡量不要亂用 很簡單 但是亂用的話 流程

ab4daa 10/04 15:58不爽可以離職

tyantmf 10/04 15:58會超亂

leptoneta 10/04 15:58高階語言用goto根本不配當工程師

devidevi 10/04 16:00goto強制跳出迴圈可以,看你怎麼用

devidevi 10/04 16:01用goto代表你沒更好的處理方式

k47100014 10/04 16:06還是有存在的必要啦

kshieh 10/04 16:08我都用jump

ChungLi5566 10/04 16:09就以前寫教科書的教授被goto雷到

ChungLi5566 10/04 16:10寫書的時候狂罵goto導致後面一批學

ChungLi5566 10/04 16:10生不敢用

TaiwanFight 10/04 16:10要怎被雷到 連goto都不會用還怎樣?

TaiwanFight 10/04 16:11就是需要goto才會創造goto出來

TaiwanFight 10/04 16:11真的很屌自己去弄一個語言取代C

qwe04687 10/04 16:12拿來跳出多層loop蠻方便的

TaiwanFight 10/04 16:12弄不出來的人根本沒資格嫌

abbag 10/04 16:12看實際用途 (廢話)

NCTUFAIWEN 10/04 16:16你去看Linux source code應該會中風==

NCTUFAIWEN 10/04 16:16,goto不濫用的話code可以變很簡潔也

NCTUFAIWEN 10/04 16:16不難懂,很多情況不用goto還不是要包

NCTUFAIWEN 10/04 16:17一堆if/else有比較好看嗎?

Lowpapa 10/04 16:20rm

joygo 10/04 16:21商用的讓人寫的很難看懂就很糟糕,因為案

joygo 10/04 16:21子都會換人接手

chunfo 10/04 16:22goto不是問題 標籤太多才會是問題

BETNPP 10/04 16:23多層if /else/loop 才真的痛苦吧 考腦中

BETNPP 10/04 16:23樹枝嗎?

luciffar 10/04 16:24https://i.imgur.com/sYuEKYn.jpg

jhjhs33504 10/04 16:28看parser有太深層或有副作用簡化用

v3dys6f3a3j5 10/04 16:28改成hello world就沒問題了

joeboy 10/04 16:30GOTO很好用阿 就跟 try catch finally

bean90638 10/04 16:30問就是離

knight30115 10/04 16:322023年還有人問這個問題= =

GooglePixel 10/04 16:33弄一堆巢狀屎code才真的痛苦

liyahui 10/04 16:33會hello world好厲害啊!我只會hello kit

liyahui 10/04 16:33ty而已

sm981512 10/04 16:33不要用==

rq654 10/04 16:35有時候沒有更簡單的辦法還是會用

chean1020 10/04 16:38寫扣祖傳的故意裝高深莫測好讓自己薪資

chean1020 10/04 16:38高一點的方法,你不用跟自己職涯過不去

chean1020 10/04 16:38,你用了公司沒法跟你過不去

rswa 10/04 16:42if else while 就是為避免濫用goto才產生的

rswa 10/04 16:42可讀性問題..

rswa 10/04 16:43現在比較適合就是跳出多層loop 0.0

rswa 10/04 16:44https://tinyurl.com/2p9rmtb8

rswa 10/04 16:45wiki的範例就是很好舉例goto 濫用的問題

teddy 10/04 16:47Linux source code裡面一堆Gotoㄛ

kashiwa27 10/04 16:50寫todo才是王道

jhjhs33504 10/04 16:51所以Windows一堆switch而Linux一堆g

jhjhs33504 10/04 16:51oto

liyahui 10/04 16:53我同事覺得自己寫的別人看不懂是件值得驕

Ceferino 10/04 16:53後面的人debug會很煩

liyahui 10/04 16:53傲的事,這種要怎麼嗆他

jhjhs33504 10/04 16:55想看看哪一種設計debug比較方便吧

adsl9527 10/04 16:57菜逼巴去看 linux kernel code

knme 10/04 17:00不是車不好 是駕駛員太差

g5978gyy 10/04 17:01就嗆他都不要忘記自己在寫啥 休督欸丟

tommyhlu 10/04 17:03容易亂吧

MK47 10/04 17:08你們沒有code review?不喜歡大家規範起來啊

MK47 10/04 17:09我有聽過別家公司有白爛離職前一個月 自主加

MK47 10/04 17:09班把自己的部份改的超噁心的笑話

rswa 10/04 17:15剛看了一下linux souce code

rswa 10/04 17:16它的goto 也只用在結束function用0.0

rswa 10/04 17:16不會跳來跳去XD

rswa 10/04 17:17重點就是可讀性啦 你寫的不要讓人讀不下XD

rswa 10/04 17:19我發覺你內文都寫了 = = 自己判斷一下吧

potential208 10/04 17:20那麼會寫你就自己改啊

NCTUFAIWEN 10/04 17:22樓上你要確定欸,要不要看一下Linux p

NCTUFAIWEN 10/04 17:22age_frag_alloc這支?這種跳法在linux

NCTUFAIWEN 10/04 17:22內不是少數

ThisisLongID 10/04 17:30用爆啊 這樣離職後接手的人才會痛

rswa 10/04 17:31大哥我才剛第一次看XD 一大排都我說的用法

rswa 10/04 17:31我是不太確定XD

rswa 10/04 17:32重點是在濫用的問題 XD

rswa 10/04 17:32你寫的可讀性很好 不是濫用就很ok啊

polay 10/04 17:33以前我也會避goto 但遇到很多迴圈要break

polay 10/04 17:33就直接跳到最後 蠻爽的

kaitokid1214 10/04 17:35溫來ㄎㄧgoto Hawaii

hotdogmc 10/04 17:35自己判斷好嗎 這也要問

catvsdog 10/04 17:46也就可讀性差跟增加Debug困難度而已 自

catvsdog 10/04 17:46己如故有本事掌握也沒什麼

GoroMajima 10/04 18:05爽就好

WWIII 10/04 18:16快跑 goto都是糞code

Mensholaten 10/04 18:29open source 也一堆 goto 重點是寫

Mensholaten 10/04 18:29的好不好 不要看到goto就高潮

Mensholaten 10/04 18:30通常一看到goto就說爛的 通常自己也

Mensholaten 10/04 18:30很...

blackstyles 10/04 18:30kernel driver才會好用辣

internetms52 10/04 18:32理論上不會一天到晚在跳多層迴圈才

internetms52 10/04 18:32

choosin 10/04 18:33例外處理 方向往下 不過函式該拆要拆 上

choosin 10/04 18:33百行的函式一大堆資源宣告goto也難救

offstage 10/04 18:51以前程式設計教授禁止我們使用

deray 10/04 19:08智障才用goto

ayugioh2003 10/04 19:351968 年有人討論過了,goto有害論

a731977 10/04 20:08C用goto處理例外正常 不要懷疑

orze04 10/04 20:16結論是沒有一定

zero00072 10/04 20:17單一出口釋放資源好好用。不然要寫一

zero00072 10/04 20:17堆 if 來判斷 NULL 嗎?

i386 10/04 20:18linux kernel裡面也一堆goto 不會正確用的

i386 10/04 20:18人才在那邊叫人不要用 笑死

ery001 10/04 20:18不能用的話還會有這語法?

ery001 10/04 20:19會用的就用,別理那些不敢用的廢話

zero00072 10/04 20:21while (0) { break; } 是替代寫法,不

zero00072 10/04 20:21過好逼雞。

uncle925 10/04 20:24樓上WIKI的GOTO示範code真的跟自障一樣

shikemurajy 10/04 20:28https://hackmd.io/@sysprog/c-cont

shikemurajy 10/04 20:28rol-flow

Ponimp 10/04 20:29等你要看的時候就知道了

DCC1609 10/04 21:20zero大是想說do{/* Do something*/ bre

DCC1609 10/04 21:20ak;}while(0); 嗎

zero00072 10/04 21:23對,一時忘了逼雞語法。哈。

leveger0903 10/04 21:54我會用 goto 同事建議包迴圈用 cont

leveger0903 10/04 21:54inue 跳到

leveger0903 10/04 21:56不過我寫 goto 主要是程式碼扁平化

leveger0903 10/04 21:56而且我的 goto 起迄位置一定在同一

leveger0903 10/04 21:56

Curapikt 10/04 21:57哈你可以看看現代程式語言為什麼都沒go

Curapikt 10/04 21:57to就是智障也可以學程式

superpandal 10/05 09:08就效能考量和狀態流 還有其它用途

superpandal 10/05 09:10很可惜在shell中只有csh這種爛東西支

superpandal 10/05 09:10持 雖然可以模擬

centaurjr 10/05 11:42一堆公司都用GOTO當錯誤回傳阿

centaurjr 10/05 11:42說不配的是不是CODE看太少

Hwangloveyu 10/05 16:38