在 cocos2d-x 源码 中,有大量的这种 do{}while(0)
的用法,例如这个:
do { CCImage* pImage = new CCImage(); CC_BREAK_IF(NULL == pImage); bRet = pImage->initWithString(text, (int)dimensions.width, (int)dimensions.height, eAlign, fontName, (int)fontSize); CC_BREAK_IF(!bRet); bRet = initWithImage(pImage); CC_SAFE_RELEASE(pImage); } while (0);
根据语意,这样写至少保证do后面的代码块执行一次。
这样写的意义是什么?为什么不直接使用块,而一定要加上 do while 循环?
解决方案
发现这个问题一搜一大堆哦,题主确定不是SF的托么,哈哈,开个玩笑
- 有时候只是为了代码分块,比仅仅使用
{}
更直观些。 - 当你执行一段代码到一半,想跳过剩下的一半的时候,如果你正处于
do while
循环中,则能用break
达到这个目的。 - 变形的
goto
,有些公司不让用goto
。 - 这样做也可以是
兼容
各种编译器。 - 为了
宏
展开的时候不会出错。如果直接放在花括号
里会出错的