解决代码逻辑嵌套过多的技巧 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);
最大的优点有两个,
一个是可以是现在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();
}
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();
}
相关文章推荐
- do{ ...}while(0)应用技巧
- 用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
- Android中RecyclerView嵌套滑动冲突解决的代码片段
- if,while和do..while语句的汇编形式代码
- define中为何经常会使用 do{ } while(0);来包装多条语句代码
- 内核代码宏中 do{...}while(0) 的作用以及宏中#和##的作用及典型应用
- 高级设置电脑系统windows7防火墙出错代码0×6D9原因与解决技巧
- 技巧四 Delphi XE3 代码自动提示bug解决
- 关于do{}while()的代码讨论
- do{}while(0)的使用技巧
- Eclipse使用技巧 - 5. Eclipse代码自动补全失效解决办法
- 利用do-while的一个技巧
- do{ ;}while(false)技巧揭密
- 【c++技巧】do...while(0)在宏定义中的巧妙用法
- asp.net如何加快页面加载(三)——后台代码之细节2(while,do..while,for,foreach)
- 有关过多if-else代码的优雅解决方式(搭配注解替代枚举的方法)
- @while+do。。。done和case。。。esac或者if。。。then。。fi的嵌套使用以及if的!判断@
- Xcode编译策略之代码逻辑顺序不正确,变量不显示问题解决方案
- 【编程技巧】do...while(0)的妙用
- 使用do...while的方法输入一个月中所有的周日(实例代码)