Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 取代goto语句的方法
【标  题】:取代goto语句的方法
【关键字】:goto
【来  源】:http://blog.csdn.net/Suprman/archive/2006/08/08/1036945.aspx

取代goto语句的方法

Your Ad Here


许多程序设计文章,包括某些教材,都反对goto语句的滥用,甚至强调不用goto语句。
问题在于对于某些程序逻辑,一些初学者找不到更好的替代方法,下面给出两个常用技巧以解决这个问题。
1。利用do...while(0)语句
对于较深的if_then嵌套,当某个条件满足时,需要跳出整体判断逻辑,此时取代goto的就是break,例如:

   do
         if cond1 then
              if cond2 then
                   break;//
              else
                   do_other
              endif
        else if
              break;//
        else
              dothing
        endif
   while(0)
   ...

看似没有意义的语句,确发挥了意料之外的作用,此方法适用于大部分语言。
一些开放源代码项目,如果是c语言代码,多采用此策略。
2。利用异常机制
显然这个方法需要语言具有异常机制,对于一个较长的程序段,加上内部逻辑嵌套较为繁杂,如果采用抛异常的方法,既可以轻松转向,又可以捕获相应的程序状态,下面是一段c++事例代码:
{
 class do_failed{};//在这个类中可以定义相应的提示信息

try{ 
           res=dofun1();
          if(res)
          {
                     throw do_failed(res);
          }
            res=dofun2();
           if(res)
          {
                      throw ftp_failed(res);
         }
         if(dofun3())
          {
                       throw ftp_failed();
          }
 
           dofun();

           return true;
 
}catch(...)
{
            do_failed.msg();
            return false;
}
}
利用异常机制应该算是比较完善的解决方案。从以上两个例子,也可以体会到策略和机制的区别。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

模式批判之Singleton:【上一篇】
采用C++的ACE库实现的一个通用的udp通信服务器程序:【下一篇】
【相关文章】
  • 12.3.3.10 Break, continue, goto statement
  • 使用goto 使异常的处理更友善。
  • 【随机文章】
  • RSS阅读器制作之TreeView树节点移动操作的实现
  • Maya 4.0 Artisan建模-缝合表面
  • 汗颜,今天才发现Framework 2.0 版可再发行组件包不包括操作GAC的工具
  • NHibernate初学问题总结一
  • Linux入门时必学60个文件处理命令
  • 注册表修复不成功的原因
  • 李纳斯·托沃兹:Linux之父
  • 对我的网页动态生成图片方法的修改
  • VPC上linux(Radhat9.0)通过smb服务共享windows文件全功略
  • 搞定了HP的双机,庆祝一下
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.