《Cgoto语句与标号》由会员分享,可在线阅读,更多相关《Cgoto语句与标号(1页珍藏版)》请在金锄头文库上搜索。
1、C goto 语句与标号C语言提供了可随意滥用的goto语句以及标记跳转位置的标号。从理论上讲, goto语句是没有必要的,实践中不使用 goto 语句也可以很容易地写出代码。至此,本书中还没有 使用 goto 语句。但是,在某些场合下 goto 语句还是用得着的。最常见的用法是终止程序在某些深度嵌套 的结构中的处理过程, 例如一次跳出两层或多层循环。 这种情况下使用 break 语句是不能达 到目的的,它只能从最内层循环退出到上一级的循环。下面是使用goto 语句的一个例子:for ( . ) for ( . ) if (disaster)goto error;error:/* clean
2、up the mess */ 在该例子中,如果错误处理代码很重要,并且错误可能出现在多个地方,使用goto 语句将会比较方便。 标号的命名同变量命名的形式相同,标号的后面要紧跟一个冒号。标号可以位于对应的goto 语句所在函数的任何语句的前面。标号的作用域是整个函数。我们来看另外一个例子。考虑判定两个数组a与b中是否具有相同元素的问题。一种可能的解决方法是:for (i = 0; i n; i+)for (j = 0; j m; j+)if (ai = bj)goto found;/* didnt find any common element */ found: /* got one: ai
3、 = bj */所有使用了 goto 语句的程序代码都能改写成不带 goto 语句的程序,但可能会增加一些 额外的重复测试或变量。 例如, 可将上面判定是否具有相同数组元素的程序段改写成下列形 式:found = 0;for (i = 0; i n & !found; i+)for (j = 0; j m & !found; j+)if (ai = bj)found = 1;if (found)/* got one: ai-1 = bj-1 */else/* didnt find any common element */大多数情况下,使用 goto 语句的程序段比不使用 goto 语句的程序段要难以理解和维护, 少数情况除外, 比如我们前面所举的几个例子。 尽管该问题并不太严重, 但我们还是建议尽 可能少地使用 goto 语句。