**裡面經常遇見巨集定義裡面追加 do while(0);的情況
查了下資料總結了一下,認為主要原因有兩個
1:防止空定義巨集,**編譯不過。
2:防止二義
例:#define ns_func() func1(); \
func 2();
上面函式在執行以下處理的時候 。會出錯,錯誤明顯,func 2()必然執行~
if (exp)
ns_func() ;
變更定義:
#define ns_func()
上述定義在,執行以下處理的時候,編譯可能有錯誤
if (exp)
else
所以,使用 do while(0) 將定義的模組封成乙個整體,更好。
以上屬於個人理解,如果有更好的見解,可以分享一下~
巨集定義中的do while 0
如果你是c 程式設計師,我有理由相信你用過,或者接觸過,至少聽說過mfc,在mfc的afx.h檔案裡面,你會發現很多巨集定義都是用了do.while 0 或do.while false 比如說 define afxassume cond do while 0 粗看我們就會覺得很奇怪,既然迴圈裡面只執...
巨集定義中的do while 0
我們都知道do while迴圈,但是在巨集定義中常常會出現dowhile 0 的用法,這樣的迴圈不是只執行一次嗎?不用do while也可以實現相同的功能呀,那麼為什麼要使用dowhile 0 呢?我們先來分析幾個例子 define fun x func1 x func2 x if true fun...
do while 0 巨集的作用的定義
看到開放源 巨集定義經常這樣用 define some do while 0 為什麼這樣用?能夠試一下。假如乙個普通巨集定義 define some x fun1 x fun2 x if condition some x 變為 if condition fun1 x fun2 x 這樣直接加個花括號...