【发布时间】:2012-01-06 17:57:21
【问题描述】:
几个月前,我不得不修复一些导致一些问题的代码。代码看起来基本上是这样的:
int badFun() { return badFun(); }
这显然会导致堆栈溢出,即使在我使用的高级语言(SilkTest 中的 4Test)中也是如此。这段代码不可能被视为有益的。问题的第一个迹象是脚本完成后看到的警告,但没有编译错误或警告。奇怪的是,我尝试用相同结构的 C++、C# 和 Python 编写程序,并且所有这些程序都在没有语法错误或警告的情况下编译/解释,即使在所有情况下都存在运行时错误。在这些情况下,我什至没有看到任何警告。为什么默认情况下这不被视为可能的问题?
编辑:我尝试用所有三种语言编写该函数的等效项,因此我添加了这些函数标记。我对为什么这样的代码没有警告就能通过的总体原因更感兴趣。如有需要请重新标记。
【问题讨论】:
-
您的问题本身是关于 C#、C++ 还是 Python?代码示例在我看来很像 C#。
-
阻止你做一些愚蠢的事情不是编译器的工作。在大多数语言中,某些外部事件可能会导致这样的构造退出。
-
因为防止你故意用自己的脚射击自己不是计算机的责任:fullduplex.org/humor/2006/10/… 请参阅 Lisp。
-
一些 IDE 工具会发出警告,例如 Resharper for C# 和 Visual Studio 中的 VB.NET。
-
这样的尾递归可能会被编译器实现为循环,因此这段代码可能不是运行时错误,而是类似于
while(true);
标签: c# c++ python compiler-construction recursion