读书人

【编程思考】怎么使用叛逆的goto

发布时间: 2013-09-15 19:58:13 作者: rapoo

【编程思考】如何使用叛逆的goto ?

转载请注明本文地址:

http://blog.csdn.net/elezeor/article/details/11707283


记得看过不少本编程书,

提及goto这个语法时,

每本几乎都是简单地介绍一下用法,

然后注明一句:

尽可能的不要使用这个语法,

因为它极有可能破坏程序的完整性以及逻辑性。


诚然,

编程整个思维过程都要考虑严密,

每一步都要尽可能地处于编程者的控制之下,

然而goto这个"指哪打哪"的语法显然具有太强的自由性了,

对于大部分程序员来说,

其危险程度之高,

甚至不亚于背后忽然飘过一扫地大爷的一句"栈溢出了…"。


然而,

我不喜欢被束缚思想,

同时,我也认为一个事物的存在必然具有相应的价值。

于是,

经过思考及尝试及搜索,

终于发现goto在以下几种情况是可以一用的。


【跳出多个for循环】

  while (system_call() == -1)    {        if (errno != EINTR)        {            // handle real errors            break;        }    }

但如果稍微敏感一些的读者,

会一眼看到这两者之间的区别:

goto是以条件优先,从而实现循环。

while却让人误解为先循环,然后再去判断条件。


怎样?是否有些强词夺理?

确实如此,

因为我们从编程开始就习惯了避开goto,

转而使用其他语法代替,

久而久之,

原本一些看似歪曲的念头却慢慢地被大家所接受,

成为了心目中"正直“ 的标杆。

而原本为此而生的语法,

却因其强大的副作用而被束之高阁。


笔者在此并不争论孰是孰非,

就像面向对象编程也好,面向函数编程也好,面向过程编程也好,

在合适的地方选择合适的工具,

这样才是编程最为理想的境界。


结尾:

goto语句本身的用法其实并不仅限于如此,

大部分的程序员都很聪明,

毕竟,聪明的猴子都有自己剥香蕉的方式,

因此肯定还有各种千奇百怪的用法夹杂在行行代码之中,

比如说Donald E. Knuth的这篇论文:

http://cs.sjsu.edu/~mak/CS185C/KnuthStructuredProgrammingGoTo.pdf


最后是本文部分内容链接:

http://stackoverflow.com/questions/245742/examples-of-good-gotos-in-c-or-c


2013.9.15 By Elezor


读书人网 >编程

热点推荐