→ ykjiang:我只有上述兩種情況會這麼寫 06/27 13:28
→ ykjiang:而且這兩種情況滿常發生的 06/27 13:28
→ tinlans:避免 goto 的場合下通常真正需要的是 return,除非是那種 06/27 13:58
→ tinlans:一個 function 塞好幾頁 code 的才真的需要 goto。 06/27 13:58
→ tinlans:換句話說,拆成小 function,就不必為了閃 goto 06/27 14:00
→ tinlans:而用 do while 開 block 來用 break 去做。 06/27 14:00
→ tinlans:上次戰這個是在 C99 之前了 當年 inline 沒標準化才有爭議 06/27 14:02
→ ykjiang:我同意用拆成小 function 改用 return 的作法,我也有想到 06/27 14:17
→ ykjiang:但是為了偷懶,還是會先用 do-while-break 必要時才改寫 06/27 14:18
→ ykjiang:提到 C99 ,嗯敝公司的開發工具還沒跟上,唉 06/27 14:20
推 ledia:一切的錯誤都是來自於偷懶啊 ~~~ XD 06/27 17:49
推 cobrasgo:我覺得goto還是有用的到的地方,像是執行到function的一 06/27 23:07
→ cobrasgo:半,之前malloc了一堆東西,現在出錯要收掉,直接goto到 06/27 23:08
→ cobrasgo:最後一次來收 06/27 23:08
→ cobrasgo:以前在學校也是聽到goto儘量不要用,可是現在不這麼認為 06/27 23:09
→ cobrasgo:了。學校和業界看到的東西還是有一些差距 06/27 23:09
→ tinlans:goto 本來就有用得到的地方,學校只有亂教的老師會全盤 06/27 23:49
→ tinlans:否認它的用處。但也確實存在不少誤會只能使用 goto 的場合 06/27 23:49
→ tinlans:。某些時候甚至我還會用比 goto 還恐怖的東西, 06/27 23:51
→ tinlans:就是 setjmp() 跟 longjmp()。不過這都是在學會 C++ 之前 06/27 23:52
→ tinlans:的事情了... 06/27 23:52
推 VictorTom:(抖) 恐怖~~拜....<(_ _)> XD 06/28 00:26
→ VictorTom:話說小弟公司也的確在driver會用goto跳到Error case做 06/28 00:26
→ VictorTom:資源回收說, 想想要漂亮的處理起來好像真不太容易Orz 06/28 00:27
→ tinlans:那不考慮直接用 pool 嗎?不然配置資源順序是 A -> B -> C 06/28 01:27
→ tinlans:,配完 B 出錯只能釋放 A B,配完 C 才出錯才能釋放 A B C 06/28 01:27
→ tinlans:。煩都煩死了,整個 pool 丟掉最快。 06/28 01:28
→ tinlans:而且應該大部分的編譯器還有支援 alloca,如果配置的資源 06/28 01:29
→ tinlans:確定在 function return 後就會釋放,可以用這個。 06/28 01:29
→ tinlans:解決類似問題的工具還有 GNU libiberty 的 obstack。 06/28 01:31
推 VictorTom:確實小弟在driver看到過正如t大舉的例子一般, 按順序來, 06/28 01:36
→ VictorTom:錯了還要goto走, 一個一個檢查誰要free這種瑣碎事...Orz 06/28 01:37
→ VictorTom:不過也有部份的code疑似有自己的管理pool, 說疑似是因為 06/28 01:38
→ VictorTom:被包裝好了, 平常根本不會trace到XD 或許真的該額外抽些 06/28 01:40
→ VictorTom:時間自己研究精進寫程式的技術或其他工具方法說....Q_Q~ 06/28 01:41