Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ do{}while(0)有什么用?_C++_Python_C_Semantics_Do While - Fatal编程技术网

C++ do{}while(0)有什么用?

C++ do{}while(0)有什么用?,c++,python,c,semantics,do-while,C++,Python,C,Semantics,Do While,可能重复: 我想知道do{…}while(0)(..作为其他代码的占位符)的用途是什么,因为据我所知,它与仅使用..完全相同 您可以在官方的CPython源代码中找到类似的代码。例如,Py_DECREF宏: #define Py_DECREF(op) \ do { \ if (_Py_DEC_REFTOTA

可能重复:


我想知道
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

通常,它允许您使用
break
continue
跳过剩余代码,而不使用
goto
return
(完全从函数返回)。在您的示例中,目的非常不同——它强制用户使用
而不会导致任何编译器警告。