将C++中的goto语句转化为非goto语句

将C++中的goto语句转化为非goto语句

  goto语句是公认的被编程语言支持但不建议使用的语句。一方面,在某些时候使用goto语句能增加代码的可读性,降低其复杂性。另一方面,goto语句将增加代码的耦合性,对于大型应用的开发将带来诸多弊端。绝大多数人对使用goto语句持反对意见。另外,在学术上,Corrado Böhm及Giuseppe Jacopini从理论上证明了:任何程序都可以用顺序、分支和重复结构表示出来。这个结论表明,从高级程序语言中去掉goto语句并不影响高级程序语言的编程能力,而且编写的程序的结构更加清晰。

  但是,一些老代码上依然有goto的痕迹。有鉴于此,本文给出了将C++中的goto语句转化为非goto语句的基本方法。

  这里提供的是goto语句与跳转标签对于循环作用域来说同级(即goto语句与跳转标签之间没有被其它循环分隔。因为如果被分隔的化,break的效果就会被“其它循环”所“吸收”)时的转化。

  如下面的含goto的语句:

    if(...)
    {
    
    
        ...//某代码1
        goto somewhere;
    }
    ...//某代码2
    somewhere:
    ...//某代码3

  可转化为如下非goto语句:

    for (int order = 1; order <= 1; ++order)// 只循环一次
    {
    
    
        if(...)
        {
    
    
            ...//某代码1
            break;
        }
        ...//某代码2
    }
    ...//某代码3

猜你喜欢

转载自blog.csdn.net/wangpaiblog/article/details/113871362