有选择地禁用第三方库的C ++核心指南检查器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有选择地禁用第三方库的C ++核心指南检查器相关的知识,希望对你有一定的参考价值。

我想尝试在VS2015下的C ++ 11/14项目中使用Core Guidelines checker tool

在我的代码中,我使用了许多来自Boost的库,它们会引发很多警告。我并不担心这些警告,因为Boost正在做很多非常聪明的工作,并且这些图书馆的编写目的不是为了符合准则,而这些准则主要是他们所遵循的。

但是在如此大量的警告中,我无法在我的代码中找到真正的问题(至少根据工具)。

有没有办法抑制第三方代码的所有警告?也许在#including boost标题之前和之后有一些属性?

我从Visual C ++团队博客中读过this page,但我一直无法找到它。

答案

目前,在VS中,抑制来自第三方库的警告的功能仍然是实验性的,但肯定会出现。

VS 2017版15.6预览版1附带了一个功能,可以抑制来自第三方库的警告。在下面的文章中,他们使用“外部标头”作为术语来引用第三方库中的标头。

https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/

上面的文章基本上就是这样说的

  • 指定外部标头
  • 指定外部标头的警告级别

抑制他们的警告。例如,如果我们在some_lib_dir目录中有外部头文件,并且想要在my_prog.cpp中编译我们的代码,这取决于外部头文件,则以下命令应该完成这项工作。

cl.exe /experimental:external /external:I some_lib_dir /external:W0 /W4 my_prog.cpp

请注意,/experimental:external是必需的,因为这仍然是一个实验性功能,此功能的详细信息可能在将来发生变化。

无论如何,我们需要等待Visual Studio的未来发布。

另一答案

有一个未记录的环境变量CAExcludePath,用于过滤该路径中文件的警告。我通常在%CAExcludePath%设置为%Include%的情况下运行。

你也可以在MSBuild中使用它,看这里的例子(混合成功):Suppress warnings for external headers in VS2017 Code Analysis

MSVC正在开发类似于GCC系统头的东西,应该是解决这个问题的更全面的解决方案。

以上是关于有选择地禁用第三方库的C ++核心指南检查器的主要内容,如果未能解决你的问题,请参考以下文章

我会Python,且第三方系统有接口,我应该如何通过Python去调用第三方系统的接口,进行对接?

快速谓词导致错误无法识别选择器发送到实例 0x156c9580'

dotnet reactor 是加壳吗

Core Data 文档基于多个 nib 基于选择

Java类加载器回顾

Jquery禁用Asp.net核心中的选定选项无法正常工作