c++ - 通过提高新 C++ 代码的警告级别来强制构建的好方法

标签 c++ visual-c++ compiler-warnings enforcement

我继承了多个 Windows 应用程序的大型 C++ 代码库,这些应用程序已被许多客户成功使用。

  • 代码库很大,>1mill LOC。
  • 代码库已有 15 年以上的历史。
  • 代码库在某些领域以 C 编程风格和/或不是很现代的 C++ 风格为主,例如不使用标准 C++ 集合和算法。
  • 不幸的是,代码库仅以警告级别 2(Visual C++ 中的/W2)编译。我想提高到 3 级 (/W3) 以提高安全性并为 64 位做好准备。

将警告级别提高到 3 的最大问题是收到的许多警告涉及有符号/无符号不匹配,我认识到解决现有代码库的所有这些问题将是一项非常艰巨的任务。

什么是确保和强制执行提交到代码库的新代码在编译时增加警告级别的好方法?

用更一般的术语来说,这个问题可以改写为如何将提高的编程质量强制执行到新提交的代码中。如果您什么都不做,根据我的经验,新代码往往会受到影响并采用与现有代码相似的样式,而不是根据更现代的标准进行改进。

最佳答案

我什至会达到警告级别 4 (/W4)。


由于您使用的是 Visual Studio,因此很容易抑制烦人的警告,例如已签名与未签名的比较:

#pragma warning(disable:NNNN)

NNNN 是您的警告编号。现在将所有这些禁用的警告放在一个头文件中(例如,“tedious_warnings.h”)并在所有地方强制包含该头文件 - 项目属性 -> C/C++ -> 高级 -> 强制包含文件。
稍后,或者更好,尽快,删除强制包含并通过警告解决问题,因为它们中的大多数都很容易修复(size_t 而不是 int 等).

关于c++ - 通过提高新 C++ 代码的警告级别来强制构建的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6014815/

相关文章:

c - 为什么编译器没有警告我空的 if 语句?

c++ - 在调试中,如何知道函数重复调用中参数的统计信息(最大-最小值、平均值、分布...)?

java - 为什么这个 Java 泛型方法定义有警告?

c++ - 检测我们是在子类还是基类

c++ - MSXML C++ 声明默认命名空间

c++ - 为什么范围解析在这里不起作用?

api - 如何使用visual c++在win32 API中创建圆形/圆形按钮

emacs - 使用带有配置 : function might not be available at runtime 的包

c++ - Clang 发出有关不受支持的 __declspec 属性的警告

c++ - 如何使用 STL 和/或 Boost 在 C++ 中模拟 SQL 连接