可能是重复的问题:
为什么C/C++宏中有时会出现无意义的do/while和if/else语句?
我遇到了下面这样的代码:
#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)); \
}
顺便说一下:这段代码来自 libev 的 ev_local.h 文件。