質問

可能な複製:
なぜc/c ++マクロにある/while/else statentementsが意味のないことがあるのですか?
マクロを定義するとき(0)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)
役に立ちましたか?

解決

コンパイラが必要になります ; したがって、マクロは関数呼び出しのように見えます:

Py_DECREF(x); // ok
Py_DECREF(x) // error
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top