Closed. This question needs details or clarity. It is not currently accepting answers. Learn more。
想改进这个问题吗?添加细节并通过editing this post澄清问题。
5年前关闭。
尾部递归执行与goto相同的效果。或者说,在lang C中,while和goto替代了Scheme中尾部递归的角色是什么让设计师决定同时保留goto和while在C中的实现?因为我认为人们在实际情况中很少使用“goto”。
如果goto和while要弥补C不能通过递归方式编写来实现迭代的错误,它们是否在同一个特殊构造中-以避免正常的递归。(就像“cond”在Scheme中的“if”不同一样)这个问题与它们保留这两个单词的原因有关吗?
想改进这个问题吗?添加细节并通过editing this post澄清问题。
5年前关闭。
尾部递归执行与goto相同的效果。或者说,在lang C中,while和goto替代了Scheme中尾部递归的角色是什么让设计师决定同时保留goto和while在C中的实现?因为我认为人们在实际情况中很少使用“goto”。
如果goto和while要弥补C不能通过递归方式编写来实现迭代的错误,它们是否在同一个特殊构造中-以避免正常的递归。(就像“cond”在Scheme中的“if”不同一样)这个问题与它们保留这两个单词的原因有关吗?
最佳答案
尾部递归不能替代goto
。尾部调用是,如果你也有一级函数(C也没有)。
是什么让设计师们决定保留C语言中的goto和while工具?
如果没有while
(和for
,在较小程度上),就不能正确地进行结构化编程-goto
很少是表示控制流的最佳方式使用goto
(至少在C的上下文中)仍然是有用的,因为它可以更清楚、更有效地表示一些没有内置控制流构造函数的模式。例如,它比在每一个可能的出口点重复清理更容易和可靠地清除功能出口。
如果C有类似scheme的宏,也许它只需要一个原语goto
就可以了,所有的循环构造都构建在goto
之上作为宏。但是C没有这样的宏,这是有充分理由的(还有一些不太好的理由)。
关于c - 为什么C会保留goto和while并保留尾递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19892691/
10-12 14:51