goto 语句及标号可能是有害的,但未必全是无用的。

影响控制流程的语句:

  • (1)分支
  • (2)循环
  • (3)goto 无条件跳转

我们知道 break 只能跳出最内层的循环,如果在一个嵌套循环中遇到某个错误条件需要立即跳出最外层循环做错误处理,就可以用到 goto 语句:

for (...)for (...){...if (出现错误)goto error;}
error:出错处理;

这里的 error:叫做标号(Label),任何语句前面都可以加若干个标号。

goto 语句只能跳转到同一个函数的某个标号处,而不能跳转到其他函数中。滥用 goto 语句会使程序的控制流程非常复杂,可读性很差。

goto 语句不是必须存在的,显然可用其他方法替代,上文的代码可改写为如下形式:

int cond = 0;
for (...){for (...){...if (出现错误条件){cond = 1;break;}}if (cond)break;
}
if (cond)出错处理;

通常 goto 语句只用于这种场合,一个函数中任何地方出现了错误条件都可以立即跳转到函数末尾进行出错处理:

  • (1)释放先前分配的资源
  • (2)恢复先前改动的全局变量。(回滚操作?)

1. 等价替换

标号处也可以什么都不做:

static int NextPrime(int N) {if ( N % 2 == 0)++N;int i;for (; ; N += 2) {for (i = 3; i*i <= N; i += 2)if (N % i == 0)goto ContOuter;return N;ContOuter:;}
}

也可以通过一个布尔类型的标识变量进行判断处理:

bool NotPrime = true;
for (; ; N += 2) {NotPrime = false;for (i = 3; i*i <= N; i += 2)if (N % i == 0) {NotPrime = true;break;  }if (!NotPrime)return N;
}

goto 语句和标号相关推荐

  1. c语言goto语句标号作用,goto语句怎么用(c语言goto用法)

    goto语句怎么用(c语言goto用法) 2020-07-28 02:03:29 共10个回答 1.C语言中goto又叫无条件转移语句,可以让程序直接跳转到任意标记的位置.用法就是"goto ...

  2. C#基础系列问题一break、continue、return、goto语句

    一.break     1. break语句形式: break;     2. break语句功能:        A. 在switch语句中,break是其语法本省的一部分,break语句会终止其后 ...

  3. 使用if和goto语句构造循环

    goto是C/C++中一种非常古老的保留字,goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号: 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:). ...

  4. 跳转语句_C/C++中的goto语句

    goto 语句 无条件转移控制流. 当使用其他语句不可能将控制转移到所需位置时使用. 语法 属性(可选) goto 标号 ; C++解释 goto 语句将控制转移到标号所指定的位置.goto 语句必须 ...

  5. 【JAVA】Java中goto语句的简介与使用(java 如何跳出内嵌多层循环的方法)

    1.概述 这是我在看公司代码的时候发现,居然有一个goto语句的使用,所以来学习一下 goto语句在java中作为保留字,并没有实现它.但在其他语言中(c语言),goto是个合法的关键字 java中支 ...

  6. dup_val_on_index_oracle学习笔记(十六) PL/SQL 异常和goto语句

    PL/SQL 异常和goto语句 异常 预定义异常 oracle常见预定义异常: 错误号 异常错误信息名称 说明 ORA-0001 DUP_VAL_ON_INDEX 试图破坏一个唯一性限制 ORA-0 ...

  7. java中goto用法源代码,java中goto语句解析12

    hi, 今天无意中看到有个兄弟在java程序中多次用到了goto语句,感觉很是怪异,copy来编译下发现有很多错误! 为此,我付出了一下午时间去研究这个块被人遗忘了的可怕的"魔鬼" ...

  8. c++中goto语句用法

    goto只能在函数体内跳转,不能跳到函数体外的函数.即goto有局部作用域,需要在同一个栈内. 需要在要跳转到的程序段起始点加上标号.如下例中的part2. 1.goto 语句可用于跳出深嵌套循环 # ...

  9. c语言---16 关于goto语句

    1.goto语句 C语言提供了可以随意使用的goto语句和标记跳转的标号,但是不建议用goto语句.从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易地写出代码,但是某些场合中got ...

最新文章

  1. 347. 前 K 个高频元素(哈希表)
  2. php 检测密码,php如何检测账号密码是否匹配
  3. mybatis分页查询
  4. [原]Console小技巧——Console版贪食蛇
  5. 05.序列模型 W2.自然语言处理与词嵌入
  6. 【分类器】- KNN
  7. leetcode力扣49. 字母异位词分组
  8. 【work】输出日期为那一年的第几天
  9. MAC使用青花瓷(charles)抓包
  10. python画图入门——for循环及调色盘的应用
  11. paypal标准支付流程图
  12. 关于Adobe flash player 本地播放器
  13. 饿了么即时配送分流的可运营架构演变
  14. 从小程序快速扫码进微信群聊
  15. 【英译中】如何拍好沙滩照1——2014年7月23日
  16. 状态栏的工具类(支持多种版本类型)
  17. hihoCoder - 1272 买零食
  18. Linux学习总结-Linux磁盘分区与挂载
  19. 海信电视微助手怎么连接电脑连接网络连接服务器,海信智能电视连接手机的教程详解!...
  20. 使用moment.js轻松管理日期和时间

热门文章

  1. android studio进度条的应用,Android Studio实现进度条效果
  2. structured Streaming
  3. Object类中的主要结构
  4. java 捕获异常顺序_Java基础:异常捕获顺序
  5. java swing 删除事件_java swing清除事件队列
  6. python里 t_python中的“.T”操作
  7. 面向对象编程(七):接口(抽象类)
  8. 给程序员的建议(转自李开复)
  9. TensorFlow 中的 tf.train.exponential_decay() 指数衰减法
  10. python3使用print打印带颜色的字符串