[問題] 請問空的do{} while(0)有什麼用途

看板C_and_CPP作者 (司馬雲)時間8年前 (2016/05/11 17:25), 8年前編輯推噓6(6011)
留言17則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) mips gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): 在realtek SDK裡看到這個 #define open_logs() do {} while(0) 還有這個 #define log_error_doc(req) do {} while(0) 雖然我知道一般在macro用do while(0)是要避免if出錯,不過這邊do的{}沒塞東西orz 所以到底有什麼用處呢? --

08/04 22:34,
勉強說出愛我的原因
08/04 22:34

08/05 08:43,
卻說不出你欣賞我哪一種表情
08/05 08:43

08/05 09:27,
卻說不出在什麼場合我曾讓你動心
08/05 09:27

08/05 15:37,
更多更詳盡歌詞 在 ※ mojim.com 魔鏡歌詞網
08/05 15:37
│ 文章代碼(AID): #1Lm3cQM2 (DSLR) [ptt.cc] Re: [閒聊] 對攝影漸漸感到反感 │ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.180.98.192 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1462958758.A.371.html

05/11 17:39, , 1F
legacy code?
05/11 17:39, 1F
懂了,感謝大大 ※ 編輯: filiaslayers (175.180.98.192), 05/11/2016 17:46:45

05/11 19:50, , 2F
沒東西就代表真的沒東西, 也就是 no-op
05/11 19:50, 2F

05/11 19:50, , 3F
一個可能是如一樓說的舊程式碼的取代, 另一個可能像這名字
05/11 19:50, 3F

05/11 19:51, , 4F
應該是一些 log 的東西, 所以比較接近「刪去的除錯程式」
05/11 19:51, 4F

05/11 19:51, , 5F
也就是有可能原先這裡是一個除錯用程式碼把東西倒進 log 裡
05/11 19:51, 5F

05/11 19:52, , 6F
後來要放出去時要刪除這些除錯 log 所以取代成空敘述
05/11 19:52, 6F

05/11 19:53, , 7F
不過這種狀況理論上把 macro 改訂成空白應該也是可行的
05/11 19:53, 7F

05/11 20:48, , 8F
我看過這樣寫來當假goto的...XD
05/11 20:48, 8F

05/11 20:49, , 9F
do{...if(err) break;...}while(0)
05/11 20:49, 9F

05/11 21:10, , 10F
如果訂成空白那如果有個if裡面只有print_log,那會變成
05/11 21:10, 10F

05/11 21:10, , 11F
空的if,若是又沒有大括號會有問題
05/11 21:10, 11F

05/11 21:13, , 12F
常用來做假GOTO 由其是要檢查一堆又不太可能會出錯的
05/11 21:13, 12F

05/11 21:14, , 13F
*尤其
05/11 21:14, 13F

05/11 23:25, , 14F
都拿來當假goto+1
05/11 23:25, 14F

05/11 23:34, , 15F
真有這需求幹嘛不直接用goto
05/11 23:34, 15F

05/11 23:48, , 16F
1. 可以在區塊內宣告變數不影響外面 2.
05/11 23:48, 16F

05/11 23:48, , 17F
可以用break取代goto
05/11 23:48, 17F
文章代碼(AID): #1NClgcDn (C_and_CPP)