C / C ++编译器警告:你清理所有的代码来删除它们或将它们留在?

我曾经在很多项目上工作过,在这些项目中,我被其他人的代码更新了。 更多的时候,我编译它,并得到大约1000多个编译器警告。 当我看到编译器的警告,他们让我感到肮脏,所以我的第一个任务是清理代码,并将其全部删除。 通常我会发现十几个像未初始化的variables这样的问题。

我不明白为什么人们把他们留在这里,没有任何警告,没有完整的编辑。 我错过了什么吗? 有没有任何理由让他们离开? 任何恐怖故事分享?

我会清理任何警告。 即使是你知道的无害的东西(如果存在这样的东西的话)也会给编写代码的人留下不好的印象。

如果我不得不在别人的代码上工作的话,那么这个“臭”的标志就是其中之一。

如果不是真正的错误或潜在的未来问题,这将是一个潦草的迹象

清理他们,即使他们没有表明一个真正的问题。 否则,如果显示确实存在问题的警告出现,您将无法看清楚所有的噪音。

在我的工作中,将警告视为错误的编译器设置已打开。 所以,没有警告,否则将不会编译:)

我同意最好消除所有的警告。 如果您收到成千上万的警告,您应该优先考虑您的修补程序。

开始将您的编译器设置为最低的警告级别。 这些警告应该是最重要的。 当这些问题得到解决时,增加警戒级别并重复,直到达到最高警戒级别。 然后设置您的编译选项,使警告被视为错误。

如果您发现您怀疑可以忽略的警告,请进行一些调查来validation您的理论。 只有以最简单的方式禁用它。 大多数编译器都有#pragma指令,可以为文件的一部分禁用/启用警告。 这是一个Visual C ++的例子:

 typedef struct _X * X; // from external header, not 64-bit portable #pragma warning( push ) #pragma warning( disable: 4312 ) // 64-bit portability warning X x = reinterpret_cast< X >( 0xDDDDDDDD ); // we know X not 64-bit portable #pragma warning( pop ) 

请注意,这只会禁用单行代码的警告。 使用这种方法还可以让您在将来对代码进行简单的文本search以进行更改。

或者,您通常可以禁用单个文件或所有文件的特定警告。 恕我直言,这是危险的,应该只是最后的手段。

如果可能,清理它们。 在一个多平台/多编译器的代码库上(我已经编写了一个在6个不同的编译器上编译的7个不同的操作系统),但这并不总是可能的。 我曾经遇到过编译器错误的情况 (Itanium上的HP-UX aCC,我在看你),但是这种情况很less见。 正如其他人所指出的,您可以在这种情况下禁用警告。

很多时候,这个版本的编译器的警告可能会成为下一个版本的错误(任何从gcc 3.x升级到4.x的人都应该熟悉这个),现在清理它。

一些编译器会发出真正有用的警告,在某些情况下会变成问题–Visual C ++ 2005和2008可以警告你64位问题,这是当今巨大的好处。 如果您有任何计划迁移到64位,只是清理这些警告将大大减less您的端口时间。

在某些情况下,我会在代码中留下警告,或者在清理它们时不可行(虽然我会删除那些我可以删除的)。 例如:

  • 如果你有一些工作要做,并且你知道需要更多的工作/注意,留下一个警告来表明这可能是合适的
  • 如果你正在使用/ clr编译C ++,那么有几个警告会引起本地代码的产生。 当代码库不能在function上改变时,抑制所有这些警告可能是麻烦的
  • 清理警告,当你不明白什么是修复程序。 我已经做了几次PC-Lint的警告,并最终引入了错误。 如果你不知道改变的确切效果是什么(例如:C型转换以消除警告),不要这样做。 找出警告,或留下代码是我的build议。

无论如何,那些离开我的头顶的情况下,留下警告可能是适当的。

最糟糕的是,当你编写新的代码时,很难知道你是否意外地引入了更多的警告,因为有太多你无视了它们。

清理它们的问题是,你可能需要一些时间,或者可能没有。 但是,一般来说,你应该尽可能的清理。

因为你没有时间去修复它们,所以在你的代码中留下警告就像不刷牙,因为你早上没有足够的时间。 这是代码卫生的基本问题。

总是清理你的警告。 如果你有一个特定的情况,你知道这个警告是可以的,那么只有在这种情况下才能禁止它。

虽然一些警告可能是良性的,但大多数意味着代码的真正问题。

如果不清理所有的警告,那么警告列表将会继续增长,真正的问题案例将会在一片警告声中消失。

一个非常好的程序员的特点之一是糟糕的代码给了他们一个不安的胃口。

我努力让我所有的代码不仅是编译器干净,而且在我的IDE里面设置为相当挑剔的级别。 如果我知道比工具更好,我有时需要禁止一个警告实例,但至less也可以作为文档。

我总是启用所有的警告,然后设置我的项目停止build设,如果有任何警告。

如果有警告,那么你需要检查每一个,以确保没有问题。 一遍又一遍这样做是浪费时间。 不这样做意味着会导致错误蔓延到您的代码。

有办法删除警告(例如#pragma argsused)。

让编译器做这个工作。

我曾与许多embedded式系统合作,其中的警告将导致不稳定,崩溃或内存损坏。 除非你知道警告是无害的,否则应该处理。

警告和应该被视为错误。 如果你的代码不够好,不能很好地解决你的警告,那么你可能不应该编码。 在我的小组中,我们决定强制所有警告发生错误。 它完全结束了这个讨论,真的,恕我直言,提高代码质量。

我不喜欢警告。 我尽可能删除它们。
有时,在完成工作的压力下,我留下了一些。 我很less离开他们。 我感觉像你,肮脏,如果有任何离开。

我工作的代码库有超过4000个警告。 其中一些是合法的问题。 我们从来没有时间去修复它们,也没有重构其他破碎的东西……部分原因是代码太老了,它早于标准化的C ++。 我们只能在VC ++ 6中编译。

总是清理所有警告,或者在需要时明确禁止它们。 编译时,警告的默认设置应该是最高的(例如VS上的第4级)。

我的老板谁创造了一些代码我现在维护。 他使用编译器标志来隐藏他的解除警告。

当我有时间的时候,我会去清理我所能做的。

我试着用相当高级别的警告来编译代码,除了“有符号/无符号比较”的警告,我相信我应该修正,但永远不会被打扰。

短版本:在g ++中,我使用“-Wextra -Wno-sign-compare”来摆脱所有消息。