C++ do{}while(0)有什么用?
可能重复:C++ do{}while(0)有什么用?,c++,python,c,semantics,do-while,C++,Python,C,Semantics,Do While,可能重复: 我想知道do{…}while(0)(..作为其他代码的占位符)的用途是什么,因为据我所知,它与仅使用..完全相同 您可以在官方的CPython源代码中找到类似的代码。例如,Py_DECREF宏: #define Py_DECREF(op) \ do { \ if (_Py_DEC_REFTOTA
我想知道
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)
它使编译器需要
代码>使宏看起来像一个函数调用:
Py_DECREF(x); // ok
Py_DECREF(x) // error
通常,它允许您使用break
或continue
跳过剩余代码,而不使用goto
或return
(完全从函数返回)。在您的示例中,目的非常不同——它强制用户使用代码>而不会导致任何编译器警告。