为什么cocos2dx的代码中很多地方使用do-while(0)?

比如:

#define CC_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0)

请问:为什么要使用 do - while(0) 的写法,目的是什么? 谢谢

do {}while(0),没有实际的逻辑上的作用,但它可以保证变量的作用域,例如这个没有用括起来

#define m() int a = 0; ...

在代码中你使用宏的时候,如果是这样的话,

//代码片段

int a = 1;

//...

//在这里使用宏m()

m();//这里肯定有编译错误,因为当宏直接展开时,变量a就重复定义了,如果是用

#define m() do { int a = 0; ... }while(0);

肯定就没有问题了

谢谢你的回答,直接加 {} 实现作用域应该也可以,对吧

不行的,如下:
#define A(i) {i++;i++;}
则如下语句:
int temp = 0;
if(temp)
A(temp);
else
temp++;
展开后:
int temp = 0;
if(temp)
{i++;i++;};
else
temp++;
在if和else中间多了个空语句: ;
我使用g++编译会报:‘else’之前没有‘if’
这里有篇文章可以看看
http://www.cnblogs.com/hibraincol/archive/2010/09/25/1834275.html