推 jknm0510a: 我學的時候就叫我不要用了,有人可實際範例示範好處嗎 06/10 21:19
例子像這樣 https://gist.github.com/anonymous/5ea6b0d75808e00cf35f
雖然用if/else也可以,但真用下去會巢狀if好幾層
這例子還只有3個成員,如果struct內有10+個成員
你不會想寫10+層if/else吧
甚至某些成員還要用自己的init function
而這些init function又都有可能fail
我想沒人會想看那一大坨code吧...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.35.150
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1433947363.A.E31.html
推 ccccboom: 這種pattern的code最近看好多喔 06/10 22:52
推 lovdkkkk: 用 switch case + loop 應該也可? 06/10 22:52
推 ccccboom: 拿來當作try...catch的用法滿方便的 06/10 22:54
→ cha122977: 這樣寫有一部份是可讀性考量~簡單明瞭 06/10 22:56
→ cha122977: switch case + loop就沒那麼直覺 06/10 22:56
推 carlcarl: error handling 好用 06/10 23:13
推 Kenneth1225: c function單一出口 該free或該close的resource都可 06/11 00:06
→ Kenneth1225: 以在出口處處理 避免leak.... 06/11 00:07
推 annie: 是的 思考切勿僵化 06/11 00:40
推 shvanta: 這例子簡單明瞭 06/11 00:50
推 buckyeh: 寫C很可憐,又要避免resource leak,又要榨出最後一點效率 06/11 08:52
→ buckyeh: ,不用goto反而傷害可讀性 06/11 08:52
推 clarkman: 應該說學習的時候還是別用goto..等熟練後再用比較好 06/11 09:10
→ xatier: C/C++ 本來就不是給新手的語言 06/11 09:39
→ dreamnook: 這是頭一次覺得適合用goto XD 06/11 13:07
→ leolarrel: 我就是從linux kernel code 學會這個好用的寫法的 06/11 13:15
→ dreamnook: 我會覺得應該要說 當你對寫程式該注意的事情很熟後 06/11 13:43
→ dreamnook: 用goto是沒有關係的 可以讓程式簡潔便於維護 06/11 13:44
→ HolyBugTw: 請問用function或是function pointer取代不會比較好嗎? 06/11 13:45
→ dreamnook: function會增加stack memory吧 function pointer我不懂 06/11 13:52
→ cha122977: 事實上kernel driver的init/exit就是function pointer 06/11 14:21
→ cha122977: 就算用function還是要處理malloc失敗的case呀~ 06/11 14:23
推 Eleganse: 看到goto就頭暈 因為程式老師說1張考卷只要寫1個goto 06/11 15:15
→ Eleganse: 就是整張零分 06/11 15:15
→ Eleganse: 程式老師也變成我的碩士指導教授 有一次幫他改寫程式 06/11 15:17
→ Eleganse: 發現他有寫 goto 06/11 15:17
→ dreamnook: A man chooses, a slave obeys (歪 06/11 16:25
→ cha122977: 所以只在像kernel driver這種特別合用的地方才被用呀 06/11 16:54
→ cha122977: 如果裡面不只是做malloc的話while不太合用噢 06/12 21:10