怎样消除goto语句

 //  今天心情好差啊!暗恋已经暗恋6年的女孩了!而且今天感冒了一直咳嗽!注意:大家感冒吃枇杷露时候一定不能吃红枣的!//

goto 语句可以灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto 语句经常带来错误或隐患。

其实在linux编程中goto语句还是经常会使用到的很方便!特别是自己编写的一些小程序中。

你可以很轻松的 在网上找到这样的消除goto的示例!

if(condition1)
    goto label;
……
if(condition2)
    goto label;
……
label:
    do_something.
……
则可以使用
do{
……
}while(0);
来代替goto.
代码如下:
do{
    ……
    if(condition1)
        break;
    ……
    if(condition2)
        break;
    ……
}while(0);
//label:
    do_something.
……

切记其实goto语句和消除goto语句在本质上都是没有变化的都是通过修改ip来改变下一条程序指令的入口地址。结构化编程益于理解而已。上例中的label:出现在goto的后面!如果出现在前面呢这是我想讨论的 !

label:
  code1.。。。

if(condition1)
    goto label;

code2.。。。
if(condition2)
    goto label;
code3.。。。

如果还采用上述的办法显然是不行的!

此时可以改写为

//label:
  code1.。。。


while(condition1)
{       code1.。。。}

  code2.。。。

while(codition2)

{

//label:
  code1.。。。


while(condition1)
{       code1.。。。}

  code2.。。。

}

code3.。。。

其实可能会猜想如果就是单纯的goto呢??

label:
  code1.。。。

goto label;

code2.。。。

这样就会产生无限循环。没多大意义。但是在系统程序中也许有意义的呃!这个的修改很简单。

do

 code1.。。。

}while(1)

code2.。。。

但是如果goto语句跨函数,跨程序,那就比较棘手了。你必须把函数先整合到一起,再用上面的方法进行修改哦啊!!!!

咳得厉害不写了 !!!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值