使用do while 0 的好處

2021-10-01 06:28:56 字數 1313 閱讀 1451

dowhile(0)
這樣的**一看就不是乙個迴圈,do..while表面上在這裡一點意義都沒有,那麼為什麼要這麼用呢?

實際上,dowhile(0)的作用遠大於美化你的**。查了些資料,總結起來這樣寫主要有以下幾點好處:

1、輔助定義複雜的巨集,避免引用的時候出錯:

舉例來說,假設你需要定義這樣乙個巨集:

#define dosomething()\

foo1();\

foo2();

這個巨集的本意是,當呼叫dosomething()時,函式foo1()和foo2()都會被呼叫。但是如果你在呼叫的時候這麼寫:
if(a>0)

dosomething();

因為巨集在預處理的時候會直接被展開,你實際上寫的**是這個樣子的:
if(a>0)

foo1();

foo2();

這就出現了問題,因為無論a是否大於0,foo2()都會被執行,導致程式出錯。

那麼僅僅使用{}將foo1()和foo2()包起來行麼?

我們在寫**的時候都習慣在語句右面加上分號,如果在巨集中使用{},**裡就相當於這樣寫了:「;」,展開後就是這個樣子:

if(a>0)

;

這樣甚至不會編譯通過。所以,很多人才採用了dowhile(0);

#define dosomething() \

dowhile(0)\

...if(a>0)

dosomething();

...

2.使用do{}while(0),可以使用break語句,從do中跳出,避免goto語句:

int test(int p)

if(p ==0)

if(p==1)

samecode:

...//do something

return p;

}

3、定義乙個單獨的函式塊來實現複雜的操作:
當你的功能很複雜,變數很多你又不願意增加乙個函式的時候,使用do{}while(0);,將你的**寫在裡面,裡面可以定義變數而不用考慮變數名會同函式之前或者之後的重複。

使用do while 0 的好處

看到乙個比較好的帖子,給大家分享下!cpp view plain copy define lfw x,y do while 0 cpp view plain copy api while 0 1.替代 實現區域性作用域.在一些c的實現裡也可以用.2.避免使用goto,用break做跳出.當你執行一段...

使用do while 0 的好處

看到乙個比較好的帖子,給大家分享下!cpp view plain copy define lfw x,y do while 0 cpp view plain copy api while 0 1.替代 實現區域性作用域.在一些c的實現裡也可以用.2.避免使用goto,用break做跳出.當你執行一段...

c程式定義巨集時使用do while 0 的好處。

比如我們定義swap函式,我們一般這麼寫,define swap a,b 如果我們如下使用,不會有問題,int main 因為我們展開就變成如下,int main return 0 但是我們如果如下使用,就會有問題,int main 因為我們展開,變成如下,int main else swap y,...