为什么不提倡使用goto语句?

都说goto不遵循结构化程序设计的思想,可读性差,但是我到现在也没有理解透了为什么这样说,我有时候觉得goto还挺灵活的。

有什么简单的实例可以对照说明为什么不提倡使用goto语句么?

goto语句即转移指令,是将cpu的当前的指令指针ip直接更改为goto语句指向的指令地址,然后从该地址继续往后执行。从汇编语言的角度来说,goto语句对应汇编语言的jmp指令,但汇编语言的危险在于jmp指令的跳转是不受约束或约束较少,机器指令级级别是可以随意跳转的,除非在执行前对指令进行严格检查,这其实是非常困难的。

早期的算法语言,比如fortran、pascal、basic等都支持goto语句,因为那时的语句较少,分支结构、循环结构需要借助goto语句实现。但这些高级语言对goto语句做了严格的限制,比如:(1)可以从一个结构(条件、循环)内部跳到外部,反之则不允许;(2)不允许从子程序中直接跳出,而要采用类似return的返回语句退出子程序,当然从主程序跳入子程序是绝对禁止的;等等。这些限制对现代还支持goto语句的算法语言仍然起作用。

随着语言的结构化、模块化,有些高级语言已经不再支持goto语句。这样做是为了程序的易读、易懂,便于代码的维护。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-01
目前的编程语言都采用结构化语言,在结构化程序设计中一般不主张使用goto语句,原因为
1、在程序比较简单是用goto语句是比较灵活,但是当程序比较复杂时很容易造成程序流程的混乱。
2、利用goto语句对以后的后别人看程序是很难理解。
3、调试程序的过程也会变得很困难。
第2个回答  推荐于2017-09-07
#include <stdio.h>

int main()
{
int i = 10, s = 0;
Goto0:
s += i;
i--;
if ( i != 0 )
{
goto Goto0;
}
printf ("s = %d\n", s);
return 0;
}



#include <stdio.h>

int main()
{
int i = 10, s = 0;
while ( i )
{
s += i;
i--;
}
printf ("s = %d\n", s);
return 0;
}

一个跳来跳去,一个从上往下,你说哪个烦。大项目里面如果几个for循环一个goto跳出来,烦死你。本回答被提问者采纳
第3个回答  2010-03-20
这个你就要先理解什么叫"结构化程序设计"

你现在可能没有编写代码较长的程序,
当代码很长后,别人要读取你的代码,
你试想下,如果是没有"goto",别人可以一路顺序的读取下去,
但当你程序里面有很多"goto"后,别人读取的时候就会不停的去找你的goto目的地,不停的上翻下翻.
说得更直接点,如果你用od随便加载个程序,看看反汇编代码,你就会看到有很多JNE,JMP...这类的类似goto语句的东西,你就知道为什么要少用或者不用goto了
第4个回答  2010-03-20
简单的程序用用goto没什么问题,如果大的项目的话,可读性就会很差,不利于维护
相似回答