1

尾递归执行与goto相同的效果。或者说,在 lang C 中,whilegoto代替了 Scheme 中尾递归的作用。是什么让设计师决定在 C 中同时保留gotowhile实现?我认为人们在实际情况中几乎不会使用“goto”。

如果gotowhile是为了弥补 C 不能通过递归方式实现迭代的缺陷,它们是不是同一个特殊的构造?- 避免正常递归。(就像 Scheme 中的 'cond' 与 'if' 不同)这个问题是否与它们保留这两个词的原因有关?

4

1 回答 1

5

递归不能替代goto. 尾调用是,如果你也有一流的函数(C 也没有)。

是什么让设计师决定在 C 中同时保留 goto 和 while 实现?

没有while(并且for,在稍微较小的程度上),您将无法正确进行结构化编程 -goto很少是表达控制流的最佳方式。拥有goto(至少在 C 的上下文中)仍然很有用,因为它可以更清晰有效地表达一些没有内置控制流构造函数的模式。例如,与在每个可能的退出点重复清理相比,它在函数退出时产生更容易和可靠的清理。

如果 C 有类似方案的宏,也许它可以只使用一个原语, ,所有循环结构都建立在宏goto之上。goto但是 C 没有这样的宏,这是有充分理由的(也有一些不是很好的理由)。

于 2013-11-10T17:35:44.227 回答