为什么C保留goto和while,涉及尾递归

1 c recursion scheme sicp

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

如果gotowhile要弥补C不能通过递归方式写入来实现迭代的错误,那么它们是否处于相同的特殊构造中? - 避免正常递归.(就像'cond'不同'如果'在Scheme中)这个问题是否与他们保留这两个词的原因有关?

小智 5

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

是什么让设计师决定在C中保留goto和while工具?

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

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