3

可能重复:
为什么在 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)
4

1 回答 1

5

它使编译器需要;,因此宏看起来像一个函数调用:

Py_DECREF(x); // ok
Py_DECREF(x) // error
于 2012-02-16T18:33:27.890 回答