Sloppy's Blog

do...while(0)的妙用

// 通常的代码逻辑:
bool Execute()
{
// 分配资源
int *p = new int;
bool bOk(true);

// 执行并进行错误处理
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;
}

// ..........

// 执行成功,释放资源并返回
delete p;

p = NULL;
return true;

}`

优化后:
`bool Execute()
{
// 分配资源
int *p = new int;

bool bOk(true);
do
{
// 执行并进行错误处理
bOk = func1();
if(!bOk) break;

  bOk = func2();
  if(!bOk) break;

  bOk = func3();
  if(!bOk) break;

  // ..........
}while(0);

// 释放资源
delete p;   
p = NULL;
return bOk;
}