KPe*_*xEA 63 c c++ compiler-construction warnings
我参与了很多项目,其他人已经给了别人更新的代码.我经常编译它并获得大约1,000多个编译器警告.当我看到编译器警告时他们让我觉得很脏,所以我的第一个任务是清理代码并将它们全部删除.通常我发现大约十几个问题,比如未初始化的变量.
我不明白为什么人们把它们留在里面并且没有完全干净的编译而没有任何警告.我错过了什么吗?是否有正当理由离开他们?分享任何恐怖故事?
Rem*_*o.D 89
我会清理任何警告.即使你知道的那些是无害的(如果存在这样的东西)也会给你一个坏的印象,无论谁编译代码.
如果我不得不在别人的代码上工作,那么我会寻找一个"臭"的标志.
如果不是真正的错误或潜在的未来问题,那将是一种邋iness的迹象
Nem*_*vic 38
在我的工作中,打开了将警告视为错误的编译器设置.所以,没有警告,或者它不会编译:)
jwf*_*arn 20
我同意最好消除所有警告.如果您收到数千条警告,则应优先处理修复程序.
开始将编译器设置为最低警告级别.这些警告应该是最重要的.修复后,增加警告级别并重复,直到达到最高警告级别.然后设置编译选项,以便将警告视为错误.
如果您发现您怀疑可以忽略的警告,请进行一些研究以验证您的理论.只有这样才能禁用它,并且只能以最小的方式禁用它.大多数编译器都有#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 )
Run Code Online (Sandbox Code Playgroud)
请注意,这仅禁用单行代码的警告.使用此方法还可以在将来对代码进行简单的文本搜索以进行更改.
或者,您通常可以为单个文件或所有文件禁用特定警告.恕我直言这是危险的,应该只是最后的手段.
Zat*_*rus 14
尽可能清理它们.在一个多平台/多编译器代码库(我曾经在7个不同的操作系统和6个不同的编译器上编译的代码库),但这并不总是可行的.我见过编译器错误的情况(Itanium上的HP-UX aCC,我正在看着你),但这种情况很少见.正如其他人所说,您可以在这种情况下禁用警告.
很多时候,这个版本的编译器中的警告可能会成为下一个版本中的错误(任何从gcc 3.x升级到4.x的人都应该熟悉它),所以现在要清理它.
有些编译器会发出非常有用的警告,这些警告在某些情况下会成为问题 - Visual C++ 2005和2008可以警告你64位问题,这是一个巨大的好处.如果您有任何计划迁移到64位,只需清理这些类型的警告将大大减少您的端口时间.
在某些情况下,我会在代码中留下警告,或者清除它们是不可行的(虽然我确实删除了我能做到的).例如:
无论如何,这些都是我头顶的情况,在那里留下警告可能是合适的.
最糟糕的是,当你编写新代码时,很难知道你是否意外地引入了更多警告,因为有这么多你无论如何都要忽略它们.
清理它们的问题在于,您可能需要或不需要时间.但是,通常你应该尽可能多地清理.
始终清理警告.如果您有一个特定情况,您知道该警告是正常的,那么仅针对该实例禁止它.
虽然一些警告可能是良性的,但大多数都表示代码存在真正的问题.
如果你没有清理所有警告,那么警告列表将继续增长,真正的问题案例将在警告噪音的海洋中丢失.