PTT推薦

[問卦] 禁用 goto,goto 難道錯了嗎?

看板Gossiping標題[問卦] 禁用 goto,goto 難道錯了嗎?作者
zero00072
(赤迷迭)
時間推噓13 推:18 噓:5 →:25

各位年薪百萬的大家好啊。

厚~!教授禁用 goto,有道理嗎?goto 這麼好用的說。

像是以下的程式碼:

int main() {
System *system_list = NULL;

do {
system_list = system_init();

if (system_list) {
if (system_list->ts != 0)
break;
} else
break;

system_ts_update(system_list);
sd_journal_print(LOG_INFO, "Timestamp: %ld", system_list->ts);
} while (0);

if (system_list)
system_free(system_list);

return 0;
}

竟然用單次迴圈作 break 來假跳躍,迴圈都不迴圈了,牙給耶。

改成:

int main() {
System *system_list = system_init();

if (system_list) {
if (system_list->ts != 0)
goto out_free_system_list;
} else
goto out;

system_ts_update(system_list);
sd_journal_print(LOG_INFO, "Timestamp: %ld", system_list->ts);

out_free_system_list:
system_free(system_list);
out:

return 0;
}

是不是很直覺?要 goto 哪就 goto 哪,蘇湖~!

有沒有用 goto 罪無可赦的八卦啊?

--
;;;, , ;,;, ,;,;, ,;, ;;;, ,;;; ,;, ,;;, ,;;; , ;, ,;;, ,;,;, ,, ;;;, ;;;, ,,, ;,;,

--

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

jej 09/22 20:30窩不雞斗阿

g5637128 09/22 20:31https://bit.ly/3lNZR2z

hugo0015227 09/22 20:31goto用太多很難維護阿 不要說新人

hugo0015227 09/22 20:31自己過幾個月回來都不知道to去哪裡

KennethC 09/22 20:31不是 go to 嗎

albertfeng 09/22 20:31少年仔 賣鬆一下魔

darkholy 09/22 20:31垃圾人才用goto

cosmite 09/22 20:32go to的麻煩在於多人編成的時候容易造成

cosmite 09/22 20:32濫用. 唯一不造成混亂的用法是把goto放在

cuteSquirrel 09/22 20:32組語可以,高階語言通常會被罵。

cosmite 09/22 20:32程式尾端

CK0663 09/22 20:32highlight給推

iampig951753 09/22 20:33你過三個月重開一次就不知道自己寫

iampig951753 09/22 20:33什麼了

hizuki 09/22 20:33systemd印log那麼簡單當然可以把clean端放

hizuki 09/22 20:33下面

iampig951753 09/22 20:33重看

amotea 09/22 20:35很難偵錯 除了錯誤處理可以用以外建議不要

guest8888 09/22 20:35欸不是 你第一個if大一點就解了

Roooz 09/22 20:36goto 基本上就是自己好寫啦 但就不夠直觀

newking761 09/22 20:37用goto的十個有十個都垃圾

followwar 09/22 20:38幾千行的code你來goto一下

marktak 09/22 20:38ptf.hash

leoloveivy 09/22 20:39組合語言我用go to阿

ganganx 09/22 20:47當碼農十年了還真的沒看過goto

tkhunter 09/22 20:47來寫COBOL啦,goto到你吐

EricTao 09/22 21:05唯一看得到GOTO的地方就是教材上說不要GO

EricTao 09/22 21:05TO吧

FRST 09/22 21:13我公司幾萬行的code一直在goto說

Darum 09/22 21:39linux kernel常會看到goto的使用,配合有意

Darum 09/22 21:40義的label進行例外處理

sendow 09/22 21:42外商IC大廠寫C照樣goto

sendow 09/22 21:43菜雞才會覺得goto不能用

la8day 09/22 22:04asm(b xxx)

yamakazi 09/22 22:36linux kernel常看到go to +1

yamakazi 09/22 22:37但是go to out的那個out通常都擺在最後

yamakazi 09/22 22:37函數快結束處,不會亂go

※ 編輯: zero00072 (42.72.55.216 臺灣), 09/22/2021 22:50:37

wcre 09/22 23:46你這樣寫別人很難維護你開發的垃圾啊

henrylin8086 09/23 00:45goto我至今都不曾讓他在程式碼出現

henrylin8086 09/23 00:45過,很容易造成麵條式代碼。就算自

henrylin8086 09/23 00:45己很懂程式架構,萬一有需要他人協

henrylin8086 09/23 00:46同維護,看到這種跳來跳去的邏輯直

henrylin8086 09/23 00:46接吐血。

jakert123 09/23 01:13看到有人寫goto就想扁下去

u5b890402 09/23 06:07goto 個屁。這也不用什麼單次迴圈加b

u5b890402 09/23 06:07reak。直接把if的條件反過來寫,然後

u5b890402 09/23 06:07包住下面你想跳過的部分,這樣不是直

u5b890402 09/23 06:07觀多了?