3
可能重复:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
What's the use of do while(0) when we define a macro?
how does do{} while(0) work in macro?do {} while(0)的用途是什么?
不知使用do{ ... } while(0)
(...
为其他代码的位置固定器)是什么,因为它会作为据我所知,与使用...
完全一样。
你可以在官方的CPython来源找到像这样的代码。作为一个例子,Py_DECREF
宏:
#define Py_DECREF(op) \
do { \
if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
--((PyObject*)(op))->ob_refcnt != 0) \
_Py_CHECK_REFCNT(op) \
else \
_Py_Dealloc((PyObject *)(op)); \
} while (0)
一般来说它可以让你使用'break'或'continue'跳过剩下的代码不使用'goto'或'return'(完全从函数返回)。在你的例子中,目的是非常不同的 - 它迫使用户在没有引起任何编译器警告的情况下使用带有';'的宏。 – ildjarn 2012-02-16 18:35:06