今天一起来分析C语言,goto语句的用法。
goto语句的用法 goto语句,为无条件转移语句。
其一般格式如下:
goto 语句标号;
其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
执行goto语句后,程序将跳转到该标号处并执行其后的语句。
另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。 通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。
goto语句在多层嵌套中跳出时,常用goto语句。
案例:用goto语句和if语句构成循环语句,求 1+2+3+......+100的和。
#include
int main(void) {
int i; int sum=0; i=1;
loop: if(i<=100) { sum=sum+i; i++; goto loop; }
printf("%d
",sum); return 0; }
使用goto语句,注意事项 在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱。
goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套中,跳出时,用goto语句则比较合理。
goto语句只是不提倡,当然不是禁用,那么在什么情况下可以使用goto语句呢?
以下情况下,可以考虑用goto语句:
1、从多重循环中直接跳出 ;
2、出错时清除资源;
3、可增加程序的清晰度的情况。
不加限制地使用goto语句,会破坏清晰的程序结构,会使程序的可读性变差,甚至成为不可维护的"面条代码"。经常带来错误或隐患,比如它可能跳过了某些对象的构造,变量的初始化,重要的计算等语句。
使用goto语句的原则(仅供参考):
1、用goto语句只能goto到同一函数内,而不能从一个函数中goto到另外一个函数中。
2、用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的处应是函数内另外一段小功能的开始处。
3、不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。
4、应该避免向两个方向跳转,这样最容易导致"面条代码"。
阅读过linux内核代码的读者应该注意到,linux内核代码里面,有不少地方用了goto语句,但你会发现,它的使用还是非常谨慎的,基本都遵循上面提到的几个原则。
|