严格控制GOTO语句注意事项
注意事项
1,使用顺序、选择、循环等有限的基本结构表示程序逻辑。
2,选用的控制结构只准许有一个入口和一个出口
3,程序语句组成容易识别的块,每块只有一个入口和一个出口。
4,复杂结构应该用基本控制结构进行组合或嵌套来实现。
5,程序设计语言中没有的控制结构,可用一段等价的程序段模拟,但要求改程序段在整个系统中应前后一致。
6,严格控制GOTO语句。
packageCom.TableTest;publicclassTableText_18{publicstaticvoidmain(String[]args){newPerson();newMan();}}classPerson{publicPerson(){System.out.print("mother");}}classManextendsPerson{publicMan(){System.out.print("father");}}严格控制goto语句的注意事项如下:
一、语法与配合使用
- 标号与语句的关系:语句标号后必须要有语句,即使没有语句也要加分号“;”表示空语句。例如:
label:;// 空语句,满足语法要求- 与其他语句配合:
goto语句可以与if语句配合使用来实现循环,当指定的某个条件表达式成立时,再进行转向操作。比如在累加求和的例子中,当输入的数为负数时,使用goto转向到输出语句的位置来结束累加求和。
二、跳转范围限制
- 函数内跳转:C语言规定
goto语句只能在函数内部跳转,不能跳转到别的函数中。例如,在函数func1中的goto语句,不能跳转到函数func2内的标号位置。 - 循环内外跳转:利用
goto语句能从循环体内跳到循环体外,但不能从循环体外转到循环体内。比如:
// 错误示例:从循环体外转到循环体内gotoinside;for(inti=0;i<5;i++){inside:// 循环体内的标号printf("%d\n",i);}- 代码块与类范围限制:不能跳转到像
for循环这样的代码块中,也不能跳出类的范围(在面向对象编程中)。
三、使用场景与规范
- 使用场景限制:除非是必须的场景(如直接跳出多重循环、函数的单点返回、错误处理等),最好不要使用
goto语句。例如在深嵌套循环中跳出:
for(inti=0;i<n;i++){for(intj=0;j<m;j++)for(intk=0;k<p;k++)gotoout;// 跳出多重循环// 若不使用goto,跳出多重循环会更复杂}out:// 后续操作- 跳转方向限制:如果要使用
goto语句,只允许它跳转到本函数内的goto语句之后的标签,避免使用往回跳的goto语句来增加代码的复杂性。
总结
严格控制goto语句需要从语法要求、跳转范围、使用场景等多方面进行约束,以避免因goto语句滥用导致程序结构混乱、可读性差甚至出错的情况。在实际编程中,应尽量优先使用顺序、选择、循环结构(结合break、continue)来实现程序逻辑,仅在必要场景(如跳出多重循环、错误处理等)合理使用goto语句。
