C++ 仅在提供的差异内将警告变为错误

C++ 仅在提供的差异内将警告变为错误,c++,compiler-errors,clang,compiler-warnings,C++,Compiler Errors,Clang,Compiler Warnings,在我曾经工作过的一家公司,构建系统被设置为仅在更改的代码中将警告转换为错误。它的工作原理是,通常在您试图合并和主控的分支之间生成一个差异,然后将该差异提供给某个编译工具,并且该工具将仅在提供的差异内生成警告 这非常好,因为它允许您(例如)弃用某些函数,并让构建系统阻止人们引入该函数的新用法,然后在以后删除该函数的旧用法 不幸的是,在我离开公司之前,我没有仔细观察这个设置,也不知道如何复制它。我的问题:如何复制此设置 问题被标记为“铿锵”,但我也对使用其他编译器工具的答案感兴趣。如果我必须实现这一

在我曾经工作过的一家公司,构建系统被设置为仅在更改的代码中将警告转换为错误。它的工作原理是,通常在您试图合并和主控的分支之间生成一个差异,然后将该差异提供给某个编译工具,并且该工具将仅在提供的差异内生成警告

这非常好,因为它允许您(例如)弃用某些函数,并让构建系统阻止人们引入该函数的新用法,然后在以后删除该函数的旧用法

不幸的是,在我离开公司之前,我没有仔细观察这个设置,也不知道如何复制它。我的问题:如何复制此设置


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

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

获取合并文件。 分析差异以确定哪些区域已更改。 生成一个新文件并注入pragma directives1,在本地启用/禁用更改区域周围的警告。 还插入行指令,使其看起来像来自原始文件的警告/错误。 编译修改后的文件并保存编译器警告/错误。 删除修改过的文件。 向用户呈现编译器诊断。
1例如,对于GCC。

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

获取合并文件。 分析差异以确定哪些区域已更改。 生成一个新文件并注入pragma directives1,在本地启用/禁用更改区域周围的警告。 还插入行指令,使其看起来像来自原始文件的警告/错误。 编译修改后的文件并保存编译器警告/错误。 删除修改过的文件。 向用户呈现编译器诊断。 1例如,对于GCC。

Clang支持GCC的

例如:

#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)
Clang支持GCC的建议

例如:

#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)