重複の可能性:
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)