怎样消除goto语句

来源:互联网 发布:php exec无法执行 编辑:程序博客网 时间:2024/04/28 22:08

 //  今天心情好差啊!暗恋已经暗恋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语句跨函数,跨程序,那就比较棘手了。你必须把函数先整合到一起,再用上面的方法进行修改哦啊!!!!

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

原创粉丝点击