為什麼大神級程式的C語言程式碼裡到處都是goto?
當我學C語言時,老師整天告訴我:“不要使用goto, 這是一個壞習慣, 這種寫法很爛,而且很危險!”等等。
但是為什麼那麼多核心程式設計師那麼喜歡用goto呢?在這段linux核心 https://github.com/torvalds/linux/blob/master/kernel/sched/clock.c 程式碼裡,我覺得可以用簡單的一個while替換掉,如:
while(condition) { } //或 do { } while(condition);
注*這段程式碼來自torvalds的linux核心程式碼,其實不僅可以使用while,還有很多地方可以使用if () {} else {} 的結構代替,很多核心的其他檔案也是如此,如 fs.open http://lxr.linux.no/linux+v3.12.6/fs/open.c#L464
對此我很不理解,在某些情況下使用goto比while/do-while好嗎?如果是的話,為什麼呢?
by: musicmatze
回答一:
對於這個例子中,我估計是從原來SMP不安全(non-SMP-safe)的方式改成SMP的方式。使用goto語句對原來的程式碼改動量最小,引起潛在風險的概率最小。
我其實也不贊成你們用這種方式,但我認為絕對不要使用goto也是一種誤導。在一個只會向前走,絕不會後退的函式裡,使用goto絕對不會引起死迴圈,而且這種方式絕對是最簡單最清楚的跳轉方式。(如通過在清理程式碼和返回錯誤時使用)
by: R..
回答二:
歷史:我們也許記得Dijkstra 在1968年寫的 Goto Considered Harmful http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html, 現在快半個世紀過去了。外面已經很少看到goto了。
不過我們來分析一下這個例子,一個關於錯誤處理的,讓我們用結構化的語法來寫:
if (do_something() != ERR) { if (do_something2() != ERR) { if (do_something3() != ERR) { if (do_something4() != ERR) { ...
那麼,換成goto呢?
if (do_something() == ERR) // 一行 goto error; // | if (do_something2() == ERR) // | goto error; // | if (do_something3() == ERR) // | goto error; // V if (do_something4() == ERR) // 使用普通的平鋪形式 goto error;
我們看到這段程式碼都是平級的,不相互依辣的,明顯goto的結構更好。
by: Dietrich Epp
相關文章
- 看什麼程式語言都是天堂
- 何為程式語言?為什麼要學C語言?C語言
- 為什麼自制指令碼語言是程式語言的最高境界?指令碼
- 搞安全開發都是用什麼程式語言?
- 全球排名前十五的程式語言都是什麼車?
- 為什麼需要更多的程式語言
- 如果程式設計師是士兵,程式語言是武器,那麼每種語言都是什麼武器?程式設計師
- 為什麼會有這麼多的程式語言?
- 自制程式語言有什麼好處?
- 如果程式語言都是車
- 為什麼會有這麼多程式語言
- 為什麼我喜歡 Lisp 程式語言Lisp
- 為什麼 C# 可能是最好的第一程式語言C#
- 是什麼讓C#成為最值得學習的程式語言
- C語言goto語句以及用goto語句構成迴圈C語言Go
- 為什麼C語言屹立不倒?C語言
- C語言入門級練習(敲程式碼)C語言
- 什麼是程式語言
- C語言簡單程式碼程式C語言
- 為什麼中國人沒有自己的程式語言?
- C語言中,&和&&都是做什麼的?C語言
- C、C++、Java到Python,程式設計入門學習什麼語言好?C++JavaPython程式設計
- 為什麼我最喜歡的程式語言是 GoGo
- 為什麼要學習一門新的程式語言?
- 聊聊C語言/C++—程式和程式語言C語言C++
- 程式語言那麼多,為什麼Google獨愛JS?GoJS
- C 語言程式碼總結
- #多圖# 如果程式語言都是車
- 為什麼遊戲裡的閃避都是用“滾”的?遊戲
- 從C、C++、Java到Python,程式設計入門到底學什麼語言好?C++JavaPython程式設計
- 為什麼Go是一種設計糟糕的程式語言Go
- C語言程式C語言
- 為什麼不允許程式碼裡出現“魔數”
- 為什麼程式設計師都是夜貓子程式設計師
- 【譯】你的程式語言能做到這個嗎?(為什麼要學函數語言程式設計)函數程式設計
- 現代程式語言用什麼語言寫成?
- 為什麼說php是最糟糕的,也是最好的程式語言PHP
- 常見的程式語言python怎麼樣?各程式語言有什麼區別?Python