当前位置:  开发笔记 > 编程语言 > 正文

C/C++编译器警告:您是否清理了所有代码以将其删除或保留?

如何解决《C/C++编译器警告:您是否清理了所有代码以将其删除或保留?》经验,为你挑选了9个好方法。

我参与了很多项目,其他人已经给了别人更新的代码.我经常编译它并获得大约1,000多个编译器警告.当我看到编译器警告时他们让我觉得很脏,所以我的第一个任务是清理代码并将它们全部删除.通常我发现大约十几个问题,比如未初始化的变量.

我不明白为什么人们把它们留在里面并且没有完全干净的编译而没有任何警告.我错过了什么吗?是否有正当理由离开他们?分享任何恐怖故事?



1> Remo.D..:

我会清理任何警告.即使你知道的那些是无害的(如果存在这样的东西)也会给你一个坏的印象,无论谁编译代码.

如果我不得不在别人的代码上工作,那么我会寻找一个"臭"的标志.

如果不是真正的错误或潜在的未来问题,那将是一种邋iness的迹象


一般来说,这篇文章的+1.我唯一要补充的是,有足够的"无害"编译器警告,它会产生很多"噪音",可以隐藏更危险的警告.

2> Graeme Perro..:

清理它们,即使它们没有表明真正的问题.否则,如果出现确实表明存在问题的警告,无法通过所有噪音看到它.



3> Nemanja Trif..:

在我的工作中,打开了将警告视为错误的编译器设置.所以,没有警告,或者它不会编译:)


因为它应该是*any*项目.
在Windows上,这意味着你不能使用MFC,并且必须将所有'C'标准lib函数更改为MS的s_versions

4> jwfearn..:

我同意最好消除所有警告.如果您收到数千条警告,则应优先处理修复程序.

开始将编译器设置为最低警告级别.这些警告应该是最重要的.修复后,增加警告级别并重复,直到达到最高警告级别.然后设置编译选项,以便将警告视为错误.

如果您发现您怀疑可以忽略的警告,请进行一些研究以验证您的理论.只有这样才能禁用它,并且只能以最小的方式禁用它.大多数编译器都有#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 )

请注意,这仅禁用单行代码的警告.使用此方法还可以在将来对代码进行简单的文本搜索以进行更改.

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



5> Zathrus..:

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

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

有些编译器会发出非常有用的警告,这些警告在某些情况下会成为问题 - Visual C++ 2005和2008可以警告你64位问题,这是一个巨大的好处.如果您有任何计划迁移到64位,只需清理这些类型的警告将大大减少您的端口时间.


(Itanium上的HP-UX aCC,我正在看着你),但这种情况很少见.正如其他人所说,您可以在这种情况下禁用警告.

6> Nick..:

在某些情况下,我会在代码中留下警告,或者清除它们是不可行的(虽然我确实删除了我能做到的).例如:

如果您正在处理某些事情,并且您知道它需要更多工作/关注,请留下警告以表明这可能是合适的

如果您正在使用/ clr编译C++,那么有几个警告会导致生成本机代码; 当代码库无法在功能上进行更改时,抑制所有这些警告会很麻烦

当您不理解修复程序的功能时,请清除警告.我已经用PC-Lint警告做了几次,最后引入了bug.如果您不知道更改的确切效果是什么(例如:C风格的演员表以消除警告),请不要这样做.弄清楚警告,或单独留下代码是我的建议.

无论如何,这些都是我头顶的情况,在那里留下警告可能是合适的.



7> Greg Rogers..:

最糟糕的是,当你编写新代码时,很难知道你是否意外地引入了更多警告,因为有这么多你无论如何都要忽略它们.

清理它们的问题在于,您可能需要或不需要时间.但是,通常你应该尽可能多地清理.



8> JesperE..:

因为你没有时间修理它们而在你的代码中留下警告就像没有刷牙一样,因为你早上没有足够的时间.这是代码卫生的基本问题.



9> 17 of 26..:

始终清理警告.如果您有一个特定情况,您知道该警告是正常的,那么仅针对该实例禁止它.

虽然一些警告可能是良性的,但大多数都表示代码存在真正的问题.

如果你没有清理所有警告,那么警告列表将继续增长,真正的问题案例将在警告噪音的海洋中丢失.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有