将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