better C/C++ code(二)——谨慎使用goto

标准c/c++建议废弃使用goto,其对于goto的支持仅是对于旧代码的兼容

 

然而我们在微软的新代码中仍然看到goto的存在,这是为什么?

 

其实若是把goto与if配合,当做汇编中的LOOP使用,的确是应该废弃的

例如:

 

     int n=0;

     printf("input a string/n");

loop: if(getchar()!='/n')

       {

           n++;

           goto loop;

        }

    printf("%d",n);

 

我们可以看出把goto当做LOOP使用有如下缺点:
a.goto作为循环不明显
b.像loop这样的label标志是全局量,缺点不说也知道
c.多层嵌套,不易读写
 
但是把goto当做汇编中的jmp向下跳转,是有很多优势的
例如:
char *a=NULL;
char *b=NULL;
char *c=NULL;
 
 a=(char*)malloc(1);
 if(!a)
      goto FunName_End
 

 

b=(char*)malloc(5) ;
 if(!b)
      goto FunName_End
 
c=(char*)malloc(7) ;
 if(!c)
      goto FunName_End:
return true;
我们可以看出goto作向下跳转的jmp有如下优势
a.对于不可写为循环但也相同出口的语块,goto使代码简洁
b.代码易读
c.跳转落点精确
d.可使函数或语块有唯一出口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值