这个问题已经在这里有了答案:




已关闭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

09-09 23:13
查看更多