break 的一个“高级用法”

如果你写过不少代码,那么一定会不时遇到类似下的情况:
假设要找到文件A,复制该文件为B;然后打开B文件,然后往B文件内写入一些内容;最后在写入成功后,我们需要再进行一些相关操作。
在此过程,遇到以下情况时将放弃后续的操作,认为是操作失败:
1、如果A文件不存在;
2、如果B文件已经存在,并且询问用户是否覆盖时,用户回答“不”;
3、无法复制出B文件;
4、无法打开B文件;
5、无法写入B文件;
6、无法正常关闭B文件。
 
用伪代码写该段程序为:
 
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);
 
看,代码是不是“直”了很多?这里用了do..while,可是根本不是为了循环,而是为了使用它的break功能。每当有操作不成功,就直接用break跳出循环。所以循环条件总是一个“永假” false。
在一个程序中,这种结构相当的多,为了更加一步淡化while的原来的循环用途,我们非常值得在代码加入两个共用的宏:
#define BEG_DOWHILE do {
#define END_DOWHILE } while(false);
 
这里举的是do...while结构,在某些情况下,可以使用while...来实现类似功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值