尾递归执行与goto相同的效果。或者说,在 lang C 中,while和goto代替了 Scheme 中尾递归的作用。是什么让设计师决定在 C 中同时保留goto和while实现?我认为人们在实际情况中几乎不会使用“goto”。
如果goto和while是为了弥补 C 不能通过递归方式实现迭代的缺陷,它们是不是同一个特殊的构造?- 避免正常递归。(就像 Scheme 中的 'cond' 与 'if' 不同)这个问题是否与它们保留这两个词的原因有关?
尾递归不能替代goto
. 尾调用是,如果你也有一流的函数(C 也没有)。
是什么让设计师决定在 C 中同时保留 goto 和 while 实现?
没有while
(并且for
,在稍微较小的程度上),您将无法正确进行结构化编程 -goto
很少是表达控制流的最佳方式。拥有goto
(至少在 C 的上下文中)仍然很有用,因为它可以更清晰有效地表达一些没有内置控制流构造函数的模式。例如,与在每个可能的退出点重复清理相比,它在函数退出时产生更容易和可靠的清理。
如果 C 有类似方案的宏,也许它可以只使用一个原语, ,所有循环结构都建立在宏goto
之上。goto
但是 C 没有这样的宏,这是有充分理由的(也有一些不是很好的理由)。