C语言是面向过程的语言,在编程的时候,一般会遵从结构化程序设计的要求。
结构化程序设计要求模块单入口,单出口,而goto语句则容易破坏这种结构,所以不建议使用。
但这并不是强制的,只是一种建议,有时goto可以大幅度简化代码量,在保证代码足够清晰明确下,偶尔使用也是可以的。
以下为结构化程序设计的相关概念:
最早由E.W.Dijikstra在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序设计主要强调的是程序的易读性。
结构化程序设计曾被称为软件发展中的第三个里程碑。该方法的要点是:
(1) 主张使用顺序、选择、循环三种基本结构来嵌套连结成具有复杂层次的“结构化程序”,严格控制GOTO语句的使用。用这样的方法编出的程序在结构上具有以下效果:
a. 以控制结构为单位,只有一个入口,一个出口,所以能独立地理解这一部分。
b. 能够以控制结构为单位,从上到下顺序地阅读程序文本。
c.由于程序的静态描述与执行时的控制流程容易对应,所以能够方便正确地理解程序的动作。
(2)“自顶而下,逐步求精”的设计思想,其出发点是从问题的总体目标开始,抽象低层的细节,先专心构造高层的结构,然后再一层一层地分解和细化。这使设计者能把握主题,高屋建瓴,避免一开始就陷入复杂的细节中,使复杂的设计过程变得简单明了,过程的结果也容易做到正确可靠。
(3)“独立功能,单出、入口”的模块结构,减少模块的相互联系使模块可作为插件或积木使用,降低程序的复杂性,提高可靠性。程序编写时,所有模块的功能通过相应的子程序(函数或过程)的代码来实现。程序的主体是子程序层次库,它与功能模块的抽象层次相对应,编码原则使得程序流程简洁、清晰,增强可读性。
(4) 主程序员组。
其中(1)、(2)是解决程序结构规范化问题;(3)是解决将大划小,将难化简的求解方法问题;(4)是解决软件开发的人员组织结构问题。
使用goto编写的程序逻辑性差,可读性差
不过在退出多重循环的时候 建议使用
降低效率,降低可读性,破坏程序结构化
一般goto用来跳出多级循环
达不到现在所赞成使用的"结构化".
如果代码多了,跳来跳去感觉很乱,个人认为
goto语句会破坏“结构化”。
不但带来编程的混乱,而且容易出错。
打个比方,比如你生产一个机器,你会希望零件之间不要发生太紧密的联系,一般用螺丝之类的来连接。如果你把两个零件用电焊焊死,那么一旦一个零件出错,另一个也会受到影响。
goto起的作用就像把零件焊死一样。如果程序某一部分因为某种原因必须改动,可能会导致整个程序产生巨大的修改工作量。