关于C语言的goto语句存在很多争议,很多书籍都建议“谨慎使用,或者根本不用”。这里先不做过多的讨论,存在即合理,既然是C语言中的一个知识点,我们还是有必要学会使用。先看一些goto如何用:

一、goto的基本语法

goto语句有两部分:goto和标签名。标签的命名规则与变量的命名规则一样。如:

goto label;

要让这条语句正常工作,函数还必须包含另一条标为label的语句,该语句以标签名后紧跟一个冒号开始,如:

label:printf("goto here.");

二、goto的例子

运行结果:

从运行结果我们明显可以知道goto用法,可以跳出多重循环,程序执行过程中遇到goto语句就可以跳转到label处继续执行。值得注意的一点是:goto语句与其跳转的标签处必须在同一个函数内。

三、goto与break、continue的区别?

同样是跳转语句,goto语句与break、continue语句有什么区别呢?实际上,break和continue是goto的特殊形式。使用break与continue的好处是:其名称已经表明他们的用法。下面通过代码实例看一下break与continue的用法:

1、break测试函数

使用上面的测试程序,建一个测试break语句的函数void TestBreak(void);,如:

运行结果:

从运行结果我们明显可以知道,break可以退出当前循环。在本例子中,第一个break语句退出当前的for循环,第二个break语句退出当前的while循环。可见,一个break可退出一层循环。所以,根据break与goto的特点知道,如果是跳出很多层循环,使用goto会方便些。

2、continue测试函数

同样的,建一个测试continue语句的函数void TestContinue(void);,如:

运行结果:

从运行结果我们明显可以知道,continue可以结束本次循环(而不是整个循环)而进入下一次循环(i所代表的就是循环的次数)。

四、支持与反对goto的理由是什么?

1、不提倡使用goto

不提倡使用goto的占比应该比较多,不提倡的原因主要是:

  • 很容易把逻辑弄乱且难以理解。

2、使用goto的理由

这一部分人认为goto可以用在以下两种情况比较方便:

(1)跳出多层循环。

这个例子就类似于我们上面的goto测试程序。

(2)异常处理。

一个函数的执行过程可能会产生很多种情况异常情况。下面有几种处理方式,以代码为例:

方法一:做出判断后,如果条件出错,直接return。

方法二:先设置一个变量,对变量赋值,只有一个return。

方法三:使用goto语句。

其中,方法三就是很多人都提倡的方式,统一用goto err跳转是最方便且效率最高的,从反汇编语句条数可以看出指令用的最少,消耗的寄存器也最少,效率无疑是最高的。并且,使用goto可以使程序变得更加可扩展。当程序需要在错误处理时释放资源时,统一到goto处理最方便。这也是为什么很多大型项目,开源项目,包括Linux,都会巨量的出现goto来处理错误!

以上就是关于goto语句的基本使用、goto与break、continue的区别的总结,如有错误,欢迎指出!

c语言goto语句用法_C语言中的goto语句该不该使用?相关推荐

  1. c语言中if和goto的用法,C语言中if和goto的用法.doc

    C语言中if和goto的用法 C语言中,if是一个条件语句,用法??if(条件表达式) 语句如果满足括号里面表达式,表示逻辑为真于是执行后面的语句,否则不执行(表达式为真则此表达式的值不为0,为假则为 ...

  2. c语言 编译开关用法,C语言中define的使用方法

    C语言中define的使用方法 学习了这么多年C语言,说实话对宏自以为了如指掌了,没想到看内核代码的时候还是那么吃力,设备驱动代码中有很多这样或者那样的宏定义,各种define都有哪些学习方法呢?以下 ...

  3. c语言typedef的用法,C语言中typedef用法总结,看完就能像编程老手一样熟练运用...

    请看下文 C语言中typedef关键字应用比较常见,许多C语言初学者对它的用法不甚了解.事实上,我们可以用typedef来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型.数组类型.指针类 ...

  4. 6s在c语言中的用法,C语言中assert的用法讲解

    assert是指编写代码时做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式.下面是小编为大家整理的C语言assert的用法讲解,欢迎参考~ assert宏的原型定 ...

  5. python中fun函数的用法_c语言中fun函数的定义和使用

    c语言中fun函数的定义和使用 发布时间:2020-06-23 12:36:58 来源:亿速云 阅读:817 这期内容当中小编将会给大家带来有关c语言中fun函数的定义和使用,以专业的角度为大家分析和 ...

  6. C语言CASE语句嵌套,C语言中switch case语句的嵌套

    给一个含有嵌套的switch case的一段完整代码: #include int main() { int n=1; int m=2; switch(n) { case 1: m++; case 2: ...

  7. c语言头文件格式图片_c语言中的.h头文件的格式

    #ifndef __digital_h__ #define __digital_h__ #ifndef __cplusplus extern "C"{ #endif #ifdef  ...

  8. c语言整形符号位_C语言中32位有符号整数如何定义

    展开全部 根据计算机系统.编译系统的不同,32位有符号整数的定义会略有差异,通常的做法32313133353236313431303231363533e59b9ee7ad943133343136363 ...

  9. c语言 char java转换_c语言中char类型转int类型

    前言 在九度oj做acm的时候,经常会遇到了char类型和int类型相互转化的问题,这里进行一下总结.今后,可能会多次更新博客,因为半年做了很多总结,但是都是保存在word文档上了,现在开始慢慢向CS ...

最新文章

  1. java treemap用法_Java TreeMap put()用法及代码示例
  2. 霸榜 GitHub:去你丫的算法!
  3. 自己动手写一个能操作redis的客户端
  4. 中科曙光携手甘肃酒泉,积极构建新型智慧城市
  5. MVC4做网站六后台管理:6.2网站信息设置
  6. 南昌推进“互联网+”智慧城市建设
  7. PyQt4编程之如何让状态栏显示信息
  8. 脚本安装mysql数据库_Linux使用脚本安装MySQL数据库
  9. html5 百度地图api文档,开发指南--百度地图JavaScript API大众版.doc
  10. 微信薅羊毛拼团商城小程序 v2.7.5
  11. jsp获取连接池的实时连接数_数据库连接池原理分析及模拟实现
  12. 京东官网首页js+css+html基础
  13. android inflate,android inflate详解
  14. 大连python薪酬_大连Python开发靠谱吗
  15. Ubuntu20.04之IDEA安装及idea项目运行演示,手把手教学|超级详细,建议收藏
  16. Js简单实现音乐播放器
  17. 期末考各项低控掠过!!!
  18. 视频话题识别与跟踪 - demo 【问题总结1.0-爬虫方面】
  19. p:nth-child(1) : 选择p是子元素中的第一个元素
  20. Java —— 打印杨辉三角形

热门文章

  1. javascript~callback回调函数
  2. 文巾解题1738. 找出第 K 大的异或坐标值
  3. 趣话题:底层码农的心酸,那么我们 如何避免成为底层码农呢?
  4. 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试
  5. Linux中的通配符
  6. 如何把本地项目上传到Github上面(详细版)
  7. 苹果系统修复若干办法
  8. 全面解读数据中台,让企业实现数字化转型
  9. 可视化swing界面编辑--转载
  10. 安装opencms时遇到问题及解决方法