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

作者: filiaslayers (司馬雲)   2016-05-11 17:25:55
開發平台(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
所以到底有什麼用處呢?
作者: bibo9901 (function(){})()   2016-05-11 17:39:00
legacy code?
作者: LPH66 (-6.2598534e+18f)   2016-05-11 19:50:00
沒東西就代表真的沒東西, 也就是 no-op一個可能是如一樓說的舊程式碼的取代, 另一個可能像這名字應該是一些 log 的東西, 所以比較接近「刪去的除錯程式」也就是有可能原先這裡是一個除錯用程式碼把東西倒進 log 裡後來要放出去時要刪除這些除錯 log 所以取代成空敘述不過這種狀況理論上把 macro 改訂成空白應該也是可行的
作者: shadow0326 (非議)   2016-05-11 20:48:00
我看過這樣寫來當假goto的...XDdo{...if(err) break;...}while(0)
作者: boss0405 (boss)   2016-05-11 21:10:00
如果訂成空白那如果有個if裡面只有print_log,那會變成空的if,若是又沒有大括號會有問題
作者: prismwu   2016-05-11 21:13:00
常用來做假GOTO 由其是要檢查一堆又不太可能會出錯的*尤其
作者: cplusplus (對的人難尋)   2016-05-11 23:25:00
都拿來當假goto+1
作者: CaptainH (Cannon)   2016-05-11 23:34:00
真有這需求幹嘛不直接用goto
作者: Qbsuran (Qbsuran)   2016-05-11 23:48:00
1. 可以在區塊內宣告變數不影響外面 2.可以用break取代goto

Links booklink

Contact Us: admin [ a t ] ucptt.com