[C关键字]最受争议的关键字—goto

在C语言中存在这样一个饱受争议的关键字--“goto”。一般来说,代码的质量与goto 语句使用的次数成反比。

你可能认为关于goto的争论都已经销声匿迹了,然而迅速地浏览一遍现代的源码库,比如说SourceForge.net,你就会发现goto仍然活得很不错,并且深深地扎根于公司的服务器。进一步说,goto争论的现代版本仍在以各种各样的形式出现,如争论多处返回.多个循环出口.具名循环出口.错误处理以及异常处理。

也正是因为存在很多支持的声音,goto语句坚强地存活了下来。有的人主张慎用但不禁用goto语句,但现在的主流观点是,主张禁用goto语句。所以同学们,大可以在平时编码的时候,忘记这个关键字的存在。

 

 

 

一、反对GOTO的人的观点

 

普遍理由是:没有使用goto的代码就是高质量的代码,更容易证明其正确性。

原因一:含有goto的代码很难安排好格式。用缩进来显示goto及其目标的逻辑结构非常难。

原因二:使用goto的代码破坏编译器的优化特性。有些优化要求程序的控制流程位于不多的几个语句之间,而无条件的goto却使得流程变得很难分析,从而削弱了编译器优化代码的能力。

原因三:在实践中,使用goto会违背代码应该严格自上而下运行的原则,破坏结构化设计风格。

原因四:经常带来错误或者隐患,可能跳过变量的初始化以及重要的计算等。

 

支持GOTO的人的观点:

goto的支持者通常都会强调要在特定的场合下谨慎地使用goto。

条件一:如果使用位置恰当,goto可以减少重复的代码。如果不能一致地修改,重复的代码就会带来问题。重复代码还增加了源代码和可执行文件的体积。与代码重复所带来的问题相比,goto所具有的一些负面影响就显得不那么重要了。

条件二:goto在分配资源.使用资源后再释放资源的子程序里非常有用。通过使用goto,你可以在一段代码里执行清理操作。这将减少你在某个检测错误的位置发现问题后忘记释放资源的可能。

条件三:在某些情况下,使用goto会让代码的运行速度更快,体积更小。

 

 

 

 

总结:

 

在现代语言里,你可以很容易地把九成的goto替换成与之等价的顺序结构。对于复杂的情况,仍有九成不用goto的可能:可以把代码拆分成小的子程序,使用try-finally,使用嵌套if,检测并重新检测某个状态变量,或者重新设置条件结构。

如果谨慎使用,goto或许不会让人感到迷惑,然而一旦引入goto语句,它们就会遍布于代码之间,就像房子里有了白蚁。一旦允许使用goto,那么坏的goto就会与好的混在一起,所以最好还是禁止使用它们。

 

以上内容大部分摘自:

《Code Complete,Second Edition 》

 (即 《代码大全2》)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值