dowhile(0) 有啥用? [复制]

Posted

技术标签:

【中文标题】dowhile(0) 有啥用? [复制]【英文标题】:What is the use of dowhile(0)? [duplicate]dowhile(0) 有什么用? [复制] 【发布时间】:2012-03-08 04:27:38 【问题描述】:

可能重复:Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?What's the use of do while(0) when we define a macro?how does do while(0) work in macro?

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

【问题讨论】:

一般来说,它允许您使用breakcontinue 跳过剩余的代码,而无需使用gotoreturn(完全从函数返回)。在您的示例中,目的非常不同 - 它强制用户使用 ; 跟随宏的使用,而不会引起任何编译器警告。 【参考方案1】:

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

Py_DECREF(x); // ok
Py_DECREF(x) // error

【讨论】:

以上是关于dowhile(0) 有啥用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

瞬态变量有啥用? [复制]

lambda 函数有啥用? [复制]

javascript中的.then函数有啥用? [复制]

Python,枚举类型有啥用? [复制]

在 Android 中,启动活动对结果有啥用? [复制]

C 函数中的静态变量有啥用? [复制]