2012-02-16 65 views
3

可能重複:
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)的用途是什麼?

不知使用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) 
+2

一般來說它可以讓你使用'break'或'continue'跳過剩下的代碼不使用'goto'或'return'(完全從函數返回)。在你的例子中,目的是非常不同的 - 它迫使用戶在沒有引起任何編譯器警告的情況下使用帶有';'的宏。 – ildjarn 2012-02-16 18:35:06

回答

5

它使編譯器需要;所以宏看起來像一個函數調用:

Py_DECREF(x); // ok 
Py_DECREF(x) // error 
相關問題