擅长:python、mysql、java
<p>这里有个交易:编译器警告是<em>特性</em>。特征需要付出有限的努力。(它可以用美元来衡量,也可以用人们愿意为开源项目付出的时间来衡量,但我向你保证,这是有限的。)</p>
<p>因此,我们必须对这一努力进行预算。我们花在设计、实现、测试和调试一个特性上的每一个小时都是我们可以用来做其他事情的一个小时。因此,我们非常谨慎地决定要添加哪些特性。在</p>
<p>所有功能都是这样。警告还特别值得关注。警告必须与具有以下特征的代码有关:</p>
<ul>
<li>合法的。显然,代码必须是合法的;如果它不合法,那么首先它不是警告,而是一个错误。在</li>
<li>几乎肯定是错的。警告您正确的、需要的代码的警告是错误的警告。(此外,如果代码<em>正确</em>,则应该有一种方法来编写代码,以使警告消失。)</li>
<li>无偏见。警告应该告诉你一些细微的错误,而不是显而易见的错误。在</li>
<li>易于分析。有些警告根本是不可能的;例如,需要编译器解决停止问题的警告不会发生,因为这是不可能的。在</li>
<li>不太可能被其他形式的测试抓住。在</li>
</ul>
<p>在您的具体例子中,我们看到其中一些条件得到满足。这一准则是合法的,而且几乎肯定是错误的。但它是不是无关紧要?有人可以很容易地看到代码,并看到它是一个无限递归;警告没有多大帮助。它是否适合分析?你给出的一个简单的例子是,但是寻找无界递归的一般问题等同于解决停顿问题。它不太可能被其他形式的测试抓住吗?不,当你在你的测试用例中运行代码的时候,你会得到一个异常,告诉你到底出了什么问题。在</p>
<p>因此,我们不值得作出这种警告。我们可以用更好的方法来花这笔预算。在</p>