The C Programming Language(第 2 版) 笔记 / 3 控制流 / 3.8 goto 语句与标号

目录、参考文献


3.8 goto 语句与标号

C 语言提供了可随意滥用的 goto 语句以及标记跳转位置的标号
从理论上讲,goto 语句是没有必要的,实践中不使用 goto 语句也可以很容易地写出代码

但是,在某些场合下 goto 语句还是用得着的
最常见的用法是终止程序在某些深度嵌套的结构中的处理过程,例如一次跳出两层或多层循环
这种情况下使用 break 语句是不能达到目的的,它只能从最内层循环退出到上一级的循环
下面是使用 goto 语句的一个例子:

    for ( ... ) 
        for ( ... ) { 
            ... 
            if (disaster) 
                goto error; 
        } 
    ...
error: 
    /* clean up the mess */

在该例子中,如果错误处理代码很重要,并且错误可能出现在多个地方,使用 goto 语句将会比较方便

标号的命名同变量命名的形式相同,标号的后面要紧跟一个冒号
标号可以位于对应的 goto 语句所在函数的任何语句的前面
标号的作用域是整个函数

考虑判定两个数组 ab 中是否具有相同元素的问题
一种可能的解决方法是:

    for (i = 0; i < n; i++) 
        for (j = 0; j < m; j++) 
            if (a[i] == b[j]) 
                goto found; 
    /* didn't find any common element */ 
    ... 
found: 
    /* got one: a[i] == b[j] */ 
...

所有使用了 goto 语句的程序代码都能改写成不带 goto 语句的程序,但可能会增加一些额外的重复测试或变量
例如,可将上面判定是否具有相同数组元素的程序段改写成下列形式:

found = 0; 
for (i = 0; i < n && !found; i++) 
    for (j = 0; j < m && !found; j++) 
        if (a[i] == b[j]) 
            found = 1; 
if (found) 
    /* got one: a[i-1] == b[j-1] */ 
    ... 
else 
    /* didn't find any common element */ 
...

大多数情况下,使用 goto 语句的程序段比不使用 goto 语句的程序段要难以理解和维护
少数情况除外,比如我们前面所举的几个例子
尽管该问题并不太严重,但我们还是建议尽可能少地使用 goto 语句


目录、参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值