看到乙個比較好的帖子,給大家分享下!
[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迴圈中,則能用break達到這個目的。如下偽**:
[cpp]view plain
copy
do
我有可能被執行
我有可能被執行。
我有可能被執行。。
}while(false)
想跳到這行來,使用break不是很方便嗎?
假如啊a, b分別是兩條c語句,定義乙個順序執行他們的巨集有幾種寫法,比如
[cpp]view plain
copy
#define ab1 a; b; // x, 下面語句b不能被執行: if (cond) ab1;
#define ab2 // x, 下面語句編譯出錯:if (cond) ab2; else ...;
#define ab3 a, b // x, 有運算子優先順序問題
#define ab4 do while (0)
前面幾個都是有問題的,只有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 的好處
dowhile 0 這樣的 一看就不是乙個迴圈,do.while表面上在這裡一點意義都沒有,那麼為什麼要這麼用呢?實際上,dowhile 0 的作用遠大於美化你的 查了些資料,總結起來這樣寫主要有以下幾點好處 1 輔助定義複雜的巨集,避免引用的時候出錯 舉例來說,假設你需要定義這樣乙個巨集 defi...
c程式定義巨集時使用do while 0 的好處。
比如我們定義swap函式,我們一般這麼寫,define swap a,b 如果我們如下使用,不會有問題,int main 因為我們展開就變成如下,int main return 0 但是我們如果如下使用,就會有問題,int main 因為我們展開,變成如下,int main else swap y,...