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

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 plain copy
  1. if(occurFirstException())  
  2. {  
  3.     handleExceptionOnFirstStep();  
  4.     handleExceptionOnSecondStep();    
  5. }  
  6.   
  7. else if(occurSecondException())  
  8. {  
  9.     handleExceptionOnFirstStep();  
  10.     handleExceptionOnSecondStep();    
  11. }  
  12.   
  13. //...  

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

[cpp]  view plain copy
  1. void detectException()  
  2. {  
  3.     do  
  4.     {  
  5.         if(occurFirstException())  
  6.             break;  
  7.   
  8.         //...  
  9.   
  10.         if(occurSecondException())  
  11.             break;  
  12.   
  13.         //...  
  14.   
  15.     }while(0);    
  16.   
  17.     handleExceptionOnFirstStep();  
  18.     handleExceptionOnSecondStep();  
  19. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值