prev up next   top/contents search

comp.lang.c FAQ 列表· 第 17.10 题

有人说,goto是邪恶的,我不应该使用它们。这会不会有点极端?


A编程风格,就像写作风格一样,某种程度上是一种艺术,不能用僵化的规则来编码,尽管关于风格的讨论似乎总是围绕着这些规则。

对于goto语句,长期以来人们发现,不受限制地使用goto的语句很快就会导致难以维护的意大利面条式代码。但是,简单地、不加思考地禁止goto语句并不一定会立即导致优美的编程:一个没有结构的程序员即使不使用任何goto(可能用奇怪的嵌套循环和布尔控制变量代替)也同样能够构建一个复杂的混乱结构。许多程序员采取一种适度的立场,认为goto通常应该避免,但在少数约束良好的情况下,如果必要,是可以接受的:例如多级break语句,在switch语句中合并公共操作,或者在一个有多个错误返回的函数中集中清理任务。

大多数关于编程风格的观察或“规则”(结构化编程是好的,goto是坏的,函数应该适合一页等)通常作为指导方针比作为规则更好,并且如果程序员理解了指导方针试图实现什么,效果会更好。盲目地避免某些构造或不理解规则而盲目遵循规则,可能导致的问题与规则旨在避免的问题一样多。

此外,许多关于编程风格的意见也仅仅是意见。它们可能被强烈论证和强烈感受,它们可能得到看似有力的证据和论证的支持,但相反的意见可能同样被强烈感受、支持和论证。纠缠于“风格大战”通常是徒劳的,因为在某些问题上(如问题 5.35.99.410.7 中提到的那些),对手似乎永远无法达成一致,或者同意分歧,或者停止争论。

最后,正如 William Strunk 所写(引用自 Strunk 和 White 的经典著作 Elements of Style 的导言),

一个古老的观察是,最好的作家有时会忽略修辞规则。然而,当他们这样做时,读者通常会在句子中发现一些补偿性的优点,这些优点是以违反规则为代价获得的。除非他确信自己能做得一样好,否则他最好还是遵守规则。

参考文献:K&R2 第 3.8 节
E. Dijkstra,“Go To 语句的危害”
D.E. Knuth,“结构化编程与 goto 语句”


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管