對於調試日誌,我經常看到並使用類似恰當的C預處理宏無操作
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
,但在一些地方,我看到換成第二#define
與
#define DLOG(fmt, args...) do {} while (0)
特別是有this answer,並且對同一問題的this other answer的評論表明問題將出現在如下情況中:
if (condition)
DLOG("foo");
儘管我的快速測試表明,由此產生的分號本身將作爲條件內的no-op語句。
是一個或另一個沒有和do {} while (0)
更好?如果是這樣,爲什麼?還有什麼更好的嗎?
[do {...} while(0)它有什麼好處?](http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good -對於) – 2012-07-18 19:54:54