→ dendrobium:XXX的地方有continue嗎? 03/09 23:47
→ clarkman:沒有,xxx就是函式應該要做的事情,只是被挪到while裡面 03/09 23:49
推 clanguage:線索也太少了吧 03/09 23:49
→ clarkman:其實就是把函式放到while,然後無條件break,所以我也不 03/09 23:50
→ clarkman:懂為什麼這樣做 03/09 23:50
→ clanguage:我猜是測試用的 03/09 23:51
→ yoco315:他可能腦殼有洞... 03/09 23:52
推 softwind:#define M_foo() do{/*...*/}while(0); //包macro之用? 03/10 00:10
推 VictorTom:小弟的主管也提過像上面這樣子包macro的方式, 不過沒有 03/10 00:17
→ VictorTom:while(0)後面的';', 據說這樣寫是讓macro用起來像寫正常 03/10 00:17
→ VictorTom:程式(像func call?)的寫法, 反正compiler optimize會把 03/10 00:18
→ VictorTom:多餘的code去掉@_@" 03/10 00:18
推 softwind:奇怪?我家的codebase也沒有這種寫法... 我去哪學的... 03/10 00:21
推 bill42362:好處是到時候要阻斷這段程式碼只要改一個數字? 03/10 00:59
→ softwind:#ifdef TRACE_ON 03/10 01:19
→ softwind:#define TRACE_STR(X) do{printf("%s",X)}while(0); 03/10 01:19
→ softwind:#else 03/10 01:19
→ softwind:#define TRACE_STR(X) {} 03/10 01:20
→ softwind:#endif //大概這樣吧 03/10 01:20
→ sunneo:do{}while(0) 我也忘了再哪學到的 =_= 03/10 02:22
→ sunneo:只記得linux kernel primer有提這種範例 03/10 02:22
→ LPH66:do{}while(0) 不是只是為了讓 {} 後面不要有落單的 ; 嗎? 03/10 08:37
→ LPH66:(因為有些舊的 compiler 不吃這套) 03/10 08:37
推 flashphp:好奇怪喔,這跟直接寫#define TRACE_STR(X) printf("%s",X 03/10 10:20
→ flashphp:) 有什麼差異嗎 03/10 10:21
→ VictorTom:一條比較沒差, 但macro後面有多條的時候就需要{}了:) 03/10 11:04
→ VictorTom:另外這應該跟debug時改數字沒關係, 因為根本沒有開關讓 03/10 11:04
→ VictorTom:它改, 而且define macro展開也不容易break到吧@_@" 03/10 11:05
推 flashphp:呵, 謝v大, 但多行時不就一直 "\"下去~ 或許{}是有scope 03/10 11:22
→ flashphp:的觀念在裡面吧? ^^" 03/10 11:23
推 VictorTom:小弟我也猜是這樣, 用'\'接是ok, 但是用{}寫就有偽裝/強 03/10 11:36
→ VictorTom:制inline的fu在裡面, 所以也可能有宣告變數在macro內; 03/10 11:36
→ VictorTom:當然, 以現今的programing, 也許用inline就好:) 03/10 11:37
→ clarkman:我問到他了,他是為了避免太多return 和 if 03/10 12:30
→ clarkman:還有可以在while後面檢查new的空間是否有被release 03/10 12:31
推 dendrobium:那為什麼不直接寫個block? 03/10 12:49
→ clarkman:他讓new的指標宣告在外面,方便管理 03/10 13:00
→ adrianshum:避免太多 return 和 if?!.. 還在 while 後檢查有沒有 03/10 15:31
→ adrianshum:release?! 有人明白那是什麼鬼意思嗎? @.@ 03/10 15:31
推 VictorTom:推測是memory會在func block頭alloc好, 但是程式中間可 03/10 15:44
→ VictorTom:能有幾個step處理都可能偵測到錯誤要離開func, 這時候在 03/10 15:45
→ VictorTom:func裡插一堆return會讓code比較醜, 還要處理未使用或使 03/10 15:45
→ VictorTom:用到一半alloc來的memory. 這裡用break或許會比用一堆的 03/10 15:46
→ VictorTom:clean與return, 然後在while結束後統一做memory的free, 03/10 15:46
→ VictorTom:或許會比較乾淨?? ma~~我們家在這種狀況裡是直接goto下 03/10 15:47
→ VictorTom:去了; 而且它這招在迴圈或switch裡就會失靈的感覺@_@" 03/10 15:47
→ sunneo:避免太多 return 和if ....?檢查release ? 別聽他喇叭了 03/10 20:11
→ sunneo:亂寫就是亂寫 03/10 20:11
→ sunneo:有這樣的需求的時候 應該要開始考慮是不是該抽出成func了 03/10 20:12
推 clanguage:f大那篇連結寫的不錯阿. 03/10 23:43
→ clanguage:用在 macro 時的確很有道理 03/10 23:43
推 VictorTom:的確, 不過現在來說似乎用inline比較簡單; 不過macro的 03/11 01:06
→ VictorTom:寫法是強制inline就是了, 不過這是do{}while(0)的case; 03/11 01:06
→ VictorTom:原po那個寫法就........orz 03/11 01:07