可能重复:
为什么在 C/C++ 宏中有时会出现无意义的 do/while 和 if/else 语句?
定义宏时do while(0)有什么用?
{} 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)