我不同意断言“没有理由”。
我个人认为正确的做法是零警告政策,但不会将警告视为错误。我的断言是,这增加了程序员的生产力和责任。
我已经在团队中完成了两种方法:1)警告作为错误,2)作为策略的零警告,但没有被编译器强制执行。在这两种情况下,发布都没有任何警告,警告级别保持在零。然而,在后一种情况下,偶尔会有一些国家的警告水平在短时间内上升到极少数。
这导致了更高质量的代码和更好的团队。看看我会如何尝试从记忆中提出一个合理的例子。如果你有足够的聪明和动力,你就可以打洞,但是试图展现你的记忆力和想象力,我认为你会明白我的观点,不管我的例子中有什么缺陷。
比方说,您有一些遗留的c风格的代码,它们一直在使用signed-ints进行索引编制,并使用负面情况进行某种特殊处理。您想要使代码现代化以利用std算法,也许可以通过boost来提供。您修复了代码的一个角落,这是一个很好的概念证明,所以您想将它添加到代码审查堆栈中,因为您确定要以这种方式完成整个任务。
最终签名的东西会消失,但此时您会收到警告,表明您比较了签名和未签名的整数。如果您的公司正在执行免警告构建,您可以:
- 要static_casting。
- 介绍一些不必要的临时代码。
- 大爆炸 - 一次性移动整个事物。
同样的事情发生的原因很多。所有这些都不如推出一些警告,在你的团队会议上讨论警告,并在接下来的几周内的某个时候清理它们。铸造和临时代码会在未来几年中徘徊并污染代码,而在有动力的团队中跟踪警告将会很快得到清理。
在这一点上,有些人会声称“是的,但人们不会有足够的动机”或“不是我的团队,他们都是废话”等等(至少我经常听到这些论点)。我发现这通常是Fundamental attribution error的一个例子。如果你对待你的同事是不负责任的,不加理睬的,他们会倾向于这样做。
虽然有大量的社会科学来支持,但我只能提供我的个人经验,当然这是轶事。我曾在两个团队工作,我们从大量遗留代码库和大量警告(数千个)开始。这是一个可怕的情况,可以肯定。除了成千上万的警告之外,还有更多的警告被忽略,因为这会污染编译器输出太多。
队1:警告的警告,但不能耐受
在组1中,我们跟踪的詹金斯警告#,并在我们的弱小组会议,我们谈到了警告的数量在干什么。这是一个5人队,其中我们两个真正关心。当我们中的一个人降低警告水平时,另一个人会在会议上唱赞歌。清理警告消除了未发现的错误时,我们宣传了这一事实。在其他5位编码员中的2位加入后几个月后,我们很快(在一年内)将警告降至零。警告不时会在几十年或二十年中逐渐升高。当发生这种情况时,负责的开发人员会进来说声抱歉,并解释他们为什么在那里以及他们希望何时清理它们。一个从来没有真正有动力的人至少有足够的动机被同行压力不加任何警告。
这使得团队氛围大大改善。在某些情况下,我们就什么是处理特定警告或一类警告的最佳方式进行了富有成效的讨论,这导致我们都成为更好的程序员,并且代码改进。我们都养成了关注更干净的代码的习惯,这样做的其他讨论 - 比如1000行递归函数是否具有良好的编码 - 非常容易。
队2:警告视为错误
队2几乎完全相同在beggining团队1。同样大的遗留代码充满了警告。同样数量的开发人员,积极主动,没有动力。在第二组中,尽管我们中的一个人(我)想留下警告作为警告,但集中精力减少警告。我的另一个有动机的同事声称所有其他开发人员都是一个漏洞,如果我们没有发出警告错误,他们将永远不会摆脱它们,并且您可以从不做这些事情获得什么样的好处?我在团队1中解释了我的经验,但他没有任何经验。
我仍然在团队中工作。这是一年后,我们的代码是免费的警告,但它充满了快速黑客摆脱警告和不必要的代码。虽然我们已经消除了许多实际问题,但许多潜在的问题已经席卷而来。
此外,团队凝聚力没有提高。如果有什么降级的话,管理层正在考虑打破团队出于这个原因。从不关心警告的同事们仍然没有,而且人们对质量的关注没有增加。事实上正好相反。每当有人谈论代码质量的时候,那些人就会翻阅他们的眼睛,并将其视为另一种压迫性的,愚蠢的管理痴迷,它只会降低生产力并且几乎没有好处。更糟糕的是,无论何时我们想要引入另一个可提供有用信息的警告,这是一个重大项目,因为我们要么必须更改我们的警告即错误政策,要么在引入警告之前修复所有现有警告。因为我们没有通过内在动机来观察和修复警告,所以前者很可能会导致真正的问题,所以我们将任务添加到积压之后,并且它会滞留和滞留。
另一个例子让我发现了这个问题,并写出了这个答案,它是C++ 11的[[弃用]]功能,我想用它来标记弃用的代码,以便逐步淘汰我们警告清理的一部分。然而,这与所有警告 - 错误不兼容。
我的建议:将警告视为团队心理上的错误,但不要告诉编译器这样做。也许把一些特别有害的警告视为错误,但要区别对待。
另一方面,如果您真的需要解决这个问题,则总是可以通过编译指示取消特定警告。它也为维护人员记录了一些棘手的问题。 –
@MatthieuM。在我的阅读中,这是一个问题。也许我误解了它。最小的范围当然是最好的*当禁用警告(-as-error)时*,我不会为整个项目推荐这么做。 – ssube