这个问题已经在这里有了答案:
已关闭8年。
我不知道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