当前位置:首页 > 旅游指南

goto语句 为什么在C语言中,goto这么不受待见?

什么是goto语句

Goto语句在C语言中称为跳转语句。用于无条件跳转到其他标签。它将控制权转移给程序的其他部分。

Goto语句很少使用,因为它使程序的可读性和复杂性变差。

语法

gotolabel;

Goto语句示例

让我们看一个简单的例子来演示如何在C语言中使用goto语句。

打开Visual Studio创建一个名为:goto的项目,并创建一个源文件:goto-statement . c在这个项目中,代码如下-

#include<stdio.h>voidmain{ intage;

gotolabel:printf("你没有资格投票!n ");

输入你的年龄:scanf("%d ",& amp年龄);if(年龄& lt18){ gotogotolabel;}else{printf("您有资格投票!n ");}

}

执行上述代码,并获得以下结果

Youare not eligible to vote!Enteryou age:12Youare not eligible to vote!Enteryou age:18Youare eligible to vote!

为什么这么冷门?

二十年前,计算机编程还处于起步阶段,程序流程是由“GOTO”语句控制的。这种语句允许程序员中断当前代码行,直接转到另一个不同的代码段。清单1是一个简单的例子。

带功能的控制流

维基百科的解释是GOTO语句一直是批评和争论的对象,主要的负面影响是使用GOTO语句使程序可读性变差,甚至成为可维护的“面条代码”。从20世纪60年代到70年代,随着结构化编程变得越来越流行,许多计算机科学家得出结论,程序应该总是使用被称为“结构化”控制流的命令,例如循环和if-then-else语句,而不是GOTO。甚至在今天,许多编程风格的编码标准都禁止使用GOTO语句。GOTO语句的捍卫者认为GOTO语句的有限使用不会导致低质量的代码,并声称在很多编程语言中,有些任务不使用一个或多个GOTO语句是无法直接实现的。比如有限状态自动机的实现,跳出嵌套循环,异常处理。

对后藤最著名的批评可能是艾兹格·迪科斯彻在1968年发表的一篇题为“后藤声明的有害理论”的论文。[2] Dijiestra认为GOTO语句的无限制使用应该从高级语言中废除,因为它使分析和验证程序正确性的任务变得复杂(特别是涉及循环)。另一个观点出现在高德纳的结构化编程与GOTO语句[3]。本文分析了许多常见的编程任务,然后发现其中一些会通过使用Goto得到最理想的结构。

这些批评在一些编程语言的设计中发挥了作用。虽然Ada的设计者在20世纪70年代末就意识到了goto的批评,但是这个语句还是被包括在内,主要是为了支持GOTO语句必要代码的自动生成。[4]但是,作为goto语句目的地的标签必须用双尖括号括起来(例如,

此外,还有许多不同的语言形式可以视为goto的变形:

受限GOTO

很多语言,比如C语言和Java,都提供了相关的控制流语句,比如break和continue,这些都是有效受限的goto语句。它们的功能是无条件跳转,但它们只能跳转到循环块的末尾——继续下一个循环或结束循环(中断)

开关/外壳结构

C语言、C++和Java中的switch语句高效地实现了多通道goto,跳转目标由表达式的值来选择。

这也导致我们没有理由使用goto。

鉴于这些,goto的当前用法如下:

goto语句的结果:goto语句在C/C++等高级编程语言中保留,但建议不要使用或少用。在一些较新的高级编程语言中,如Java,不提供goto语句。虽然指定goto为关键字,但不支持其使用,使得程序简洁易读;但是后来的c#还是支持goto语句。goto语句的一个优点是可以保证程序有唯一的出口,避免嵌套过大。

另一方面,goto语句不是提倡的,但肯定不是禁用的。那么在什么情况下可以使用goto语句呢?

考虑使用goto:

直接跳出多个循环;

出现错误时清除资源;

可以提高节目清晰度的环境。

无限制使用goto破坏了清晰的程序结构,使程序可读性变差,甚至成为可维护的“面条代码”。经常会带来错误或者隐患,比如可能会跳过对象的构造、变量的初始化、重要的计算等一些语句。

以下关于使用goto语句的原则可供读者参考。

1)使用goto语句只能转到同一个函数,而不能从一个函数转到另一个函数。

2)在同一个函数中使用goto时,goto的起点应该是函数中一个小函数的结束,goto的目的标签应该是函数中另一个小函数的开始。

3)在复杂的执行状态下不允许从goto到另一个位置,比如不允许从多个嵌套循环判断中跳出。

4)应避免双向跳跃。这最有可能导致“面条码”。

读过linux内核代码的同学应该注意到,在linux内核代码中很多地方实际上都使用了goto语句,但是你会发现它的使用非常谨慎,基本遵循了上面的原则。

-结束-

本文从网络信息出发,旨在传播相关技术知识,相关内容的版权归原作者所有。

1.《goto语句 为什么在C语言中,goto这么不受待见?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《goto语句 为什么在C语言中,goto这么不受待见?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1606768.html

上一篇

洛克王国巴顿 洛克王国:实力最强大的精灵王,毒王经久不衰,他统治王国最长

下一篇

滕王阁在哪个城市 南昌十大旅游城市,《滕王阁》在此,你想去吗?

英文句子唯美励志句子 20句唯美励志的英语句子 正能量get!

如果你不必面对过去,记忆是一件美好的事情。 回忆是美好的,只要你能让过去过去。 全世界最好的颜色,就是你身上好看的那种! 最适合自己的颜色是世界上最美的颜色。 生活中只有一种幸福,那就是爱和被爱。 人生的幸福只有一个:爱与被爱。 只要我们快乐,那才是最重要的。 只要你现在开心,这就够了!...

做ai 普通程序员如何转做AI?

做ai 普通程序员如何转做AI?

导语:如今,AI已经成为最热门的行业之一。尤其是薪资方面,吸引了无数人。但是作为一个普通的程序员,如何切换到AI一直困扰着很多人。今天,边肖将帮助你总结你需要知道和学习的知识,如果你想成为顶尖的人工智能程序员。  首先我想推荐一些入门代码,可以事半功倍。学习算法可以在《实用机器学习》、《统...

可以隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速

  • 可以隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 可以隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 可以隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速

隐藏应用程序的软件 iPhone这个功能可以快速隐藏应用程序,简单快速

  • 隐藏应用程序的软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 隐藏应用程序的软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 隐藏应用程序的软件 iPhone这个功能可以快速隐藏应用程序,简单快速

隐藏应用软件 iPhone这个功能可以快速隐藏应用程序,简单快速

  • 隐藏应用软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 隐藏应用软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 隐藏应用软件 iPhone这个功能可以快速隐藏应用程序,简单快速

应用隐藏软件 iPhone这个功能可以快速隐藏应用程序,简单快速

  • 应用隐藏软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 应用隐藏软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 应用隐藏软件 iPhone这个功能可以快速隐藏应用程序,简单快速

隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速

  • 隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速
  • 隐藏应用的软件 iPhone这个功能可以快速隐藏应用程序,简单快速

安装程序正在启动服务 电脑停在“安装程序正在启动服务”解决办法

  • 安装程序正在启动服务 电脑停在“安装程序正在启动服务”解决办法
  • 安装程序正在启动服务 电脑停在“安装程序正在启动服务”解决办法
  • 安装程序正在启动服务 电脑停在“安装程序正在启动服务”解决办法