看到過一些程序中或者宏中使用do{} while (0)覺得挺奇怪,不知道為什麼這麼寫,就百度了一下... 看到一個比較好的帖子,給大家分享下! 我遇見的宏 [cpp] #define LFW(x, y) do { x = websGetVar(wp, T(#y), T("")); } while(0) [cpp] _Api() { do { //do something }while(0); } 使用do{ } while(0)的好處 1.替代{},實現局部作用域.在一些C的實現裡也可以用. 2.避免使用GOTO,用break做跳出. 當你執行一段代碼到一半,想跳過剩下的一半的時候,如果你正處於do while循環中,則能用break達到這個目的。如下偽代碼: [cpp] do { 我執行 我執行。。 我再執行。。。 if (有什麼條件滿足了我) { 呀,我想跳到另外一段代碼了,剩下的不執行了,可是不建議用goto語句,怎麼辦呢? break;/*看我的*/ } 我有可能被執行 我有可能被執行。 我有可能被執行。。 }while(false) 想跳到這行來,使用break不是很方便嗎? 假如啊a, b分別是兩條C語句,定義一個順序執行他們的宏有幾種寫法,比如 [cpp] #define AB1 a; b; // x, 下面語句b不能被執行: if (cond) AB1; #define AB2 { a; b; } // x, 下面語句編譯出錯:if (cond) AB2; else ...; #define AB3 a, b // x, 有運算符優先級問題 #define AB4 do { a; b; } while (0) 前面幾個都是有問題的,只有do while(0)解決得比較好。