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)
【问题讨论】:
一般来说,它允许您使用break
或continue
跳过剩余的代码,而无需使用goto
或return
(完全从函数返回)。在您的示例中,目的非常不同 - 它强制用户使用 ;
跟随宏的使用,而不会引起任何编译器警告。
【参考方案1】:
它使编译器需要;
,所以宏看起来像一个函数调用:
Py_DECREF(x); // ok
Py_DECREF(x) // error
【讨论】:
以上是关于dowhile(0) 有啥用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章