出自:http://blog.csdn.net/microsoftwin32/article/details/11972927
看過cocos2d-x 自帶demo的朋友相信很多人都會發現demo中用了很多do{}while(0)和CC_BREAK_IF宏.他們是做什麼用的呢?
其實這個是c++中的一個技巧.
我們時常會調用某個函數來創建一個對象,但由於內存不足或其他異常情況發生時對象可能會創建失敗,創建失敗我們就要結束當前程序轉到錯誤處理地方去處理錯誤或釋放已生成的對象。
1 int* p1 = new int; 2 3 CCObject* o1 = fun1(); 4 if(!o1) goto catchcode; 5 6 CCObject* o2 = fun2(); 7 if(!o2) goto catchcode; 8 9 //如果代碼都執行成功 10 delete p; 11 p = NULL; 12 13 //如果o1 o2有發生錯誤 14 catchcode: 15 delete p; 16 p = NULL;
我們可以看到,代碼中用了很多goto語句.c++中雖然有goto,但卻是極力不推崇這麼做.因爲goto一旦濫用會令程序的運行琢磨不定,給開發帶來很多不必要的麻煩.這時do{}while(0) 就要出場了。
1 int* p1 = new int; 2 3 do 4 { 5 CCObject* o1 = fun1(); 6 if(!o1) break; 7 8 CCObject* o2 = fun2(); 9 if(!o2) break; 10 }while(0) 11 12 delete p; 13 p = NULL; 14
對比上一段代碼,這段代碼是不是顯得簡潔了許多.而宏CC_BREAK_IF的作用就是代替if(!o1) break;這樣的代碼,所以上面if(!o1) break;這樣的代碼完全可以替代爲CC_BREAK_IF(!o1)。