可能的重复:
为什么 C/C++ 宏中有时会出现无意义的 do/while 和 if/else 语句? https://stackoverflow.com/questions/154136/why-are-there-sometimes-meaningless-do-while-and-if-else-statements-in-c-c-mac
我遇到如下代码:
#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
考虑if( something ) function1(); else function2();
If function1()
实际上是一个宏,只是使用{ }
要求您在使用时省略分号,但是do { } while(0)
让您可以使用与实际函数完全相同的语法。
(根本不使用任何类型的块构造只会生成完全损坏的代码,当然)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)