【发布时间】:2012-03-08 04:27:38
【问题描述】:
可能重复:
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)(... 作为其他代码的占位符)的用途是什么,据我所知,它与使用... 完全相同。
您可以在官方 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(完全从函数返回)。在您的示例中,目的非常不同 - 它强制用户使用;跟随宏的使用,而不会引起任何编译器警告。
标签: c++ python c semantics do-while