可能重複:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?爲什麼在宏定義中使用do {} while(0)?
我遇到了類似下面的代碼:
#define ev_io_init(ev,cb,fd,events) \
do { \
ev_init ((ev), (cb)); \
ev_io_set ((ev),(fd),(events)); \
} while (0)
我想知道爲什麼筆者使用do { } while (0)
這裏。 這與這有什麼不同嗎?
#define ev_io_init(ev,cb,fd,events) { \
ev_init ((ev), (cb)); \
ev_io_set ((ev),(fd),(events)); \
}
BTW:代碼是從libev,ev_local.h
...這樣做,但請不要... – moonshadow 2012-02-29 08:50:47
它減少的if-else嵌套的數量。 – shuva 2018-01-09 15:21:41