有选择地禁用第三方库的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 ++核心指南检查器的主要内容,如果未能解决你的问题,请参考以下文章

java类加载器有哪些

java类加载器有哪些

这段代码有啥问题?不从核心数据填充表! iPad

什么原因导致C中出现分段错误(核心转储)?

javaweb中的标签的核心标签库的常用标签

基于FFT的算法优化 要C语言完整程序(利用旋转因子的性质),有的请留言,答谢!!!(有核心代码,望指教