7.8 goto语句
goto语句在C中仍然可用。但是C没有goto语句C程序也能运行良好。Kernighan和Ritchie提到goto语句“已被滥用”,并建议“谨慎使用,
或者根本不用”。
goto语句有两部分:goto和标签名。标签的命名遵循变量命名规则。例如:
goto part2;
要让这条语句正常工作,函数还必须包含另一条标为part2的语句,该语句以标签名后紧跟一个冒号开始:
part2:printf( "Refined analysis:\n" );
7.8.1 避免使用goto
原则上,根本不用在C程序中使用goto语句。FORTRAN或BASIC(goto这两种语言而言都必不可少),可能还会依赖goto来编程。
使用goto的常见情况,然后再介绍C的解决方案。
*处理包含多条语句的if语句:
if( size > 12 )
goto a;
goto b;
a: cost = cost * 1.05;
flag = 2;
b: bill = cost * flag;
对于以前的BASIC和FORTRAN,只有直接跟在if条件后面的一条语句才属于if,不能使用块或复合语句。我们把以上模式转换成等价的C代码,标准C用复合语句或块来处理这种情况:
if( size > 12 ){
cost = cost * 1.05;
flag = 2;
}
bill = cost * flag;
*二选一
if( ibex > 14 )
goto a;
sheds = 2;
goto