仅在提供的差异内将警告变成错误

时间:2018-12-12 19:18:57

标签: c++ compiler-errors clang compiler-warnings

在我曾经工作的一家公司中,构建系统被设置为仅在更改的代码内将警告变成错误。它通过提供生成差异(通常在您尝试合并的分支与master之间),然后将该差异提供给某些编译工具来工作,该工具仅在提供的差异内产生警告。

这很棒,因为它允许您例如弃用某些功能,并让构建系统阻止人们介绍该功能的新用法,然后在以后删除该功能的旧用法。

不幸的是,在离开公司之前,我对设置的关注不够,也不知道如何复制它。我的问题:如何复制此设置?

问题被标记为Clang,但我也会对使用其他编译器工具的答案感兴趣。

2 个答案:

答案 0 :(得分:0)

如果我必须实现这一点,我的第一个想法是:

  1. 获取合并文件。
  2. 分析差异以找出更改了哪些区域。
  3. 生成一个新文件并注入#pragma指令 1 ,以在更改的区域附近本地启用/禁用警告。
  4. 还注入#line指令,使警告/错误看起来像是来自原始文件。
  5. 编译修改后的文件并保存编译器警告/错误。
  6. 删除修改的文件。
  7. 向用户提供编译器诊断。

1 例如https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas用于GCC。

答案 1 :(得分:-1)

Clang支持GCC的#pragma diagnostic

例如:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"

// ... changed code here ...

#pragma GCC diagnostic pop

MSVC也有类似的东西:

#pragma warning(push, 3)
// ... changed code here ...
#pragma warning(pop)