发新帖我要提问
123
返回列表
打印

C语言中的goto

[复制链接]
楼主: 呆板书生
手机看帖
扫描二维码
随时随地手机跟帖
41
还是那句话   心里有底的  就用。心里没底的就别用。
敢摸老虎屁股的就摸,老虎咬人 你就乱拳KO了它。
没本事的就被乱摸,小心老虎吃人。

使用特权

评论回复
42
mpuhome| | 2012-6-26 10:21 | 只看该作者
禁止使用

使用特权

评论回复
43
gomelong| | 2012-6-26 11:05 | 只看该作者
学习了,**努力。

使用特权

评论回复
44
qingjunfa01| | 2012-6-26 15:39 | 只看该作者
学习一下了

使用特权

评论回复
45
xxlin1984| | 2012-6-26 15:42 | 只看该作者
来自度娘:

goto语句的发展历程
  问题起源:
  60年代中期以后,计算机硬件技术日益进步,计算的存贮容量、运算速度和可靠性明显提高,生产硬件的成本不断降低。计算机价格的下跌为它的广泛应用创造了极好的条件。在这种形势下,迫切要求计算机软件也能与之相适应。因而,一些开发大型软件系统的要求提了出来。然而软件技术的进步一直未能满足形势发展的需要,在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题。遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软件危机”。为了克服这一危机,一方面需要对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究;另一方面,也需要对软件的编制、测试、维护和管理的方法进行研究,从而产生了程序设计方法学。
  goto语句是有害的观点:
  1968年,E·W·代克斯特拉首先提出“GOTO语句是有害的”论点,向传统程序设计方法提出了挑战,从而引起了人们对程序设计方法讨论的普遍重视。
  goto语句的争论:
  在60年代末和70年代初,关于GOTO语句的用法的争论比较激烈。主张从高级程序语言中去掉GOTO语句的人认为,GOTO语句是对程序结构影响最大的一种有害的语句,他们的主要理由是:GOTO语句使程序的静态结构和动态结构不一致,从而使程序难以理解,难以查错。去掉GOTO语句后,可直接从程序结构上反映程序运行的过程。这样,不仅使程序结构清晰,便于理解,便于查错,而且也有利于程序的正确性证明。
  持反对意见的人认为,GOTO语句使用起来比较灵活,而且有些情形能提高程序的效率。若完全删去GOTO语句,有些情形反而会使程序过于复杂,增加一些不必要的计算量。
  关于goto语句的解决方法:  
1974年,D·E·克努斯对于GOTO语句争论作了全面公正的评述,其基本观点是:不加限制地使用GOTO语句,特别是使用往回跳的GOTO语句,会使程序结构难于理解,在这种情形,应尽量避免使用GOTO语句。但在另外一些情况下,为了提高程序的效率,同时又不至于破坏程序的良好结构,有控制地使用一些GOTO语句也是必要的。用他的话来说就是:“在有些情形,我主张删掉GOTO语句;在另外一些情形,则主张引进GOTO语句。”从此,使这场长达10年之久的争论得以平息。
  后来,G·加科皮尼和C·波姆从理论上证明了:任何程序都可以用顺序、分支和重复结构表示出来。这个结论表明,从高级程序语言中去掉GOTO语句并不影响高级程序语言的编程能力,而且编写的程序的结构更加清晰。
  goto语句的结果:
  在C/C++等高级编程语言中保留了goto语句,但被建议不用或少用。在一些更新的高级编程语言,如Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使 用,使程序简洁易读;尽管如此后来的c#还是支持goto语句的,goto语句一个好处就是可以保证程序存在唯一的出口,避免了过于庞大的if嵌套。
  使用goto语句应注意的问题:
  goto语句不能跨越变量的定义向前跳转:
  //......
  goto end;
  int ix=10;
  end:
  ix=42;//会出现ix未定义的情形
  而向后跳过已经执行的变量定义语句是合法的。因为向后跳回到一个变量定义之前,系统在撤销这个变量,然后重新创建它:
  //..........
  begin:
  int sz=get_size();
  if(sz<=0) goto begin;
  执行goto语句时,首先撤销变量sz,然后程序的控制流程跳转到带begin:标号的语句继续执行,再次重新创建和初始化变量sz。

使用特权

评论回复
46
qingjunfa01| | 2012-6-26 15:56 | 只看该作者
该用时即用,不必为一些条框,钻牛角尖.

使用特权

评论回复
47
sedatefire| | 2012-6-26 16:39 | 只看该作者
一般来说,如下用法。
各种判断
if ()
{
   goto   the_error_end;

}
else
{
if ()
{
goto   the_error_end;
}
else
{
}
...
...

    return  OK;
the_error_end:
      the same    exit process
      ....
   return  ERR_NO;

使用特权

评论回复
48
李冬发| | 2012-6-27 08:59 | 只看该作者
有5年多没有go to了吧。
在C中还没有 asm{}过。

使用特权

评论回复
49
wskwxfss| | 2012-6-27 10:19 | 只看该作者
顶goto,初学者少用goto,但熟练C语言之后,还是可以用goto的,尤其是在出错处理上,使用goto可以使程序简短高效,反而有利于结构化设计。事实上,汇编程序中几乎全部是goto,所以对于嵌入式系统开发而言,应该要有能使用goto语句的能力才行。

使用特权

评论回复
50
coody| | 2012-6-27 10:37 | 只看该作者
没用过goto。

大部分人都说,晚上尽量要少出去,不安全。
你突然发现,晚上出去有时候想起来也是很美妙的事。

使用特权

评论回复
51
yhn1973| | 2012-6-27 12:00 | 只看该作者
限制使用,该用还要用

使用特权

评论回复
52
lostpod| | 2012-6-27 15:24 | 只看该作者
大多时候用汇编,偶尔写个C,总是很想念goto

使用特权

评论回复
53
lyklyk| | 2013-1-23 14:32 | 只看该作者
习惯用汇编了,用C时就也用了goto.不错!

使用特权

评论回复
54
lnshd| | 2014-3-19 17:14 | 只看该作者

使用特权

评论回复
55
lzzd0918| | 2014-3-19 17:17 | 只看该作者
goto  。一直没敢用、

使用特权

评论回复
56
有备无患| | 2014-5-28 22:44 | 只看该作者
单片机中,有时候感觉真的挺好用的,

使用特权

评论回复
57
zhousongjiang| | 2014-6-11 20:50 | 只看该作者
还是少用吧

使用特权

评论回复
58
le062| | 2015-1-10 22:40 | 只看该作者
goto,谁用虽知道,真的非常爽

使用特权

评论回复
59
qq65411253| | 2015-1-11 20:00 | 只看该作者
酒肉穿肠过,佛祖心中留!

使用特权

评论回复
60
cnlgm| | 2015-1-11 20:16 | 只看该作者
我认为,在一个函数内,只要不跳出函数体,GOTO应该是安全的,就如同一个人在网聊精神虽然出轨了,但肉体没有。但GOTO仍须谨慎对待,否则就要......不堪设想了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则