(0)do {}の使用は何ですか? [複製
質問
可能な複製:
なぜ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
所属していません StackOverflow