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 に答える