do...while(0)的妙用
在C++中,有三種類型的循環(huán)語句:for, while, 和do...while, 但是在一般應(yīng)用中作循環(huán)時, 我們可能用for和while要多一些,do...while相對不受重視。
但是,最近在讀我們項目的代碼時,卻發(fā)現(xiàn)了do...while的一些十分聰明的用法,不是用來做循環(huán),而是用作其他來提高代碼的健壯性。 1. do...while(0)消除goto語句。 bool Execute()
{ // 分配資源 int *p = new int; bool bOk(true); // 執(zhí)行并進行錯誤處理 bOk = func1(); if(!bOk) { delete p; p = NULL; return false; } bOk = func2(); if(!bOk) { delete p; p = NULL; return false; } bOk = func3(); if(!bOk) { delete p; p = NULL; return false; } // .......... // 執(zhí)行成功,釋放資源并返回 delete p; p = NULL; return true; }
bool Execute()
{ // 分配資源 int *p = new int; bool bOk(true); // 執(zhí)行并進行錯誤處理 bOk = func1(); if(!bOk) goto errorhandle; bOk = func2(); if(!bOk) goto errorhandle; bOk = func3(); if(!bOk) goto errorhandle; // .......... // 執(zhí)行成功,釋放資源并返回 delete p; p = NULL; return true; errorhandle: delete p; p = NULL; return false; }
bool Execute()
{ // 分配資源 int *p = new int; bool bOk(true); do { // 執(zhí)行并進行錯誤處理 bOk = func1(); if(!bOk) break; bOk = func2(); if(!bOk) break; bOk = func3(); if(!bOk) break; // .......... }while(0); // 釋放資源 delete p; p = NULL; return bOk; }
2 宏定義中的do...while(0) 也許你會說,我們代碼的習(xí)慣是在每個判斷后面加上{}, 就不會有這種問題了,也就不需要do...while了,如: 我是沒有眼淚的人,為了保護自己,今后我可以對任何人殘忍!為了自己,也為了關(guān)心自己的所有人。
|
|
|
來自: ShangShujie > 《資料》