0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中到底应不应该使用goto语句

Wildesbeast 来源:今日头条 作者:嵌入式大杂烩 2020-01-16 09:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

关于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的区别的总结

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217971
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144609
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66838
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言的编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、
    发表于 11-27 06:46

    C语言的分支结构介绍

    1.简单if语句 C语言中的分支结构语句中的if条件语句。 简单if语句的基本结构如下:
    发表于 11-25 07:48

    C语言和单片机C语言有什么差异

    语言的功能特性外,它可以很好的操作底层的硬件接口。在C语言的基础上,如果你把一些单片机的端口或特殊功能寄存器加于定义,使用的时候会更加方便,写语句的时候,直接直观的编写。这样就差不多是
    发表于 11-14 07:55

    C语言的printf基本用法介绍

    个简单的例子: printf(\"C语言\"); 这个语句可以在屏幕上显示“C语言”,与puts(\"
    发表于 11-12 07:04

    第4章 C语言基础以及流水灯的实现(4.5 4.6)

    4.5while循环语句 在单片机C语言编程的时候,每个程序都会固定的加一句while(1),这条语句就可以起到死循环的作用。对于while语句
    的头像 发表于 11-06 11:21 118次阅读

    人工智能行业如何使用for循环语句进行循环

    人工智能行业可以使用以下是关于for循环在不同编程语言中的基本用法说明: Python中的for循环: 主要用于遍历序列(列表、元组、字符串等) 典型结构:for item in sequence
    的头像 发表于 09-10 12:55 394次阅读

    Windows环境下32位汇编语言中文资料

    电子发烧友网站提供《Windows环境下32位汇编语言中文资料.rar》资料免费下载
    发表于 06-30 15:14 0次下载

    详解TIA Portal SCL编程语言中的IF语句

    IF 语句是编程中最基本和最重要的控制结构之一,它的主要作用是根据条件决定程序的执行路径,IF 语句是编程中实现逻辑判断和决策的基础。
    的头像 发表于 05-24 15:01 1440次阅读
    详解TIA Portal SCL编程<b class='flag-5'>语言中</b>的IF<b class='flag-5'>语句</b>

    深入理解C语言C语言循环控制

    C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C语言提供了多种循环控制
    的头像 发表于 04-29 18:49 1735次阅读
    深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:<b class='flag-5'>C</b><b class='flag-5'>语言</b>循环控制

    技术干货驿站 ▏深入理解C语言:嵌套循环与循环控制的底层原理

    大家好!在上一节中,我们学习了C语言中的基本循环语句,如for、while和do...while循环。今天,我们将进一步探讨嵌套循环和循环控制,这些技巧可以帮助我们实现更复杂的逻辑操作。无论是处理
    的头像 发表于 02-21 18:26 1040次阅读
    技术干货驿站  ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:嵌套循环与循环控制的底层原理

    GoTo否认与Grab合并传闻

    印尼网约车巨头GoTo于当地时间2月4日正式提交文件,明确否认同竞争对手Grab的合并传闻。该公司强调,在未来12个月内,除实施股票回购计划外,并无任何重大行动计划。 此前,市场上有消息称Grab
    的头像 发表于 02-06 10:08 838次阅读

    DAC5672 buffer处不应该是output类型吗?

    buffer处不应该是output类型吗?还是说仅仅IBIS无法仿真?
    发表于 01-15 07:21

    EE-62:在C语言中访问短字内存

    电子发烧友网站提供《EE-62:在C语言中访问短字内存.pdf》资料免费下载
    发表于 01-07 14:02 0次下载
    EE-62:在<b class='flag-5'>C</b><b class='flag-5'>语言中</b>访问短字内存

    EE-128:C语言中的DSP:从C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:从C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>语言中</b>的DSP:从<b class='flag-5'>C</b>调用汇编类成员函数

    AMC1305正常方波信号频率周期不应该为20MHz,保持不变吗?

    ,最后换算成电流。这样的话,那AMC1305输出的方波信号的频率应该是保持不变的,为20MHz。但是手册上画的这个示意图该怎么理解?显示的是随着差分输入电压的变化,不仅是占空比发生了变化,方波信号周期也发生了变化;正常方波信号频率周期不应该为20MHz,保持不变吗? 麻烦
    发表于 12-23 06:04