您的位置:首页 > 编程语言

解决代码逻辑嵌套过多的技巧 do{} while(0);

2015-05-07 15:09 393 查看
1,解决逻辑嵌套过多,代替goto语句

if( A 文件存在 )

{

执行 A 文件的相关操作;

if( B 文件不存在|| 用户允许覆盖原有B文件)

{

复制A文件为B文件;

if(复制文件成功)

{

打开B文件;

if(打开文件成功)

{

写入文件;

if(写入成功)

{

关闭B文件;

if(关闭成成功)

{

执行其它必须在一切成功后进行的操作。

……

}

}

}

}

}

}

改为:

do

{

if(A 文件不存在)

break;

执行 A 文件的相关操作;

if(B文件存在 && 用户不允许覆盖)

break;

复制A文件为B文件;

if(复制不成功)

break;

打开B文件;

if(打开B文件不成功)

break;

写入文件;

if(写入文件不成功)

break;

关闭B文件;

if(关闭不成功)

break;

执行其它必须在一切成功后进行的操作。

……

}

while(false);

2,解决将多个命令写在一个宏中以及宏尾部的分号问题

这个语法?被称之为防御式编程,

最大的优点有两个,

一个是可以是现在C++的宏定义中,

同时解决将多个命令写在一个宏中以及宏尾部的分号问题。

宏定义中的do...while(0)

如果你是C++程序员,我有理由相信你用过,或者接触过,至少听说过MFC, 在MFC的afx.h文件里面, 你会发现很多宏定义都是用了do...while(0)或

do...while(false), 比如说:

#define AFXASSUME(cond) do { bool __afx_condVal=!!(cond); ASSERT(__afx_condVal); __analysis_assume(__afx_condVal); } while(0)

3:就是我们可以用它来代替多个if内的数个重复命令语句:
比如说这样的代码:

[cpp] view
plaincopy

if(occurFirstException())

{

handleExceptionOnFirstStep();

handleExceptionOnSecondStep();

}

else if(occurSecondException())

{

handleExceptionOnFirstStep();

handleExceptionOnSecondStep();

}

//...

我们就可以使用do{}while(0)来简化:

[cpp] view
plaincopy

void detectException()

{

do

{

if(occurFirstException())

break;

//...

if(occurSecondException())

break;

//...

}while(0);

handleExceptionOnFirstStep();

handleExceptionOnSecondStep();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: