巨集定義追加do while 0 的原因

2021-08-04 02:40:22 字數 430 閱讀 2664

**裡面經常遇見巨集定義裡面追加   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 這樣直接加個花括號...