如何从我的 Visual Studio 静态代码分析中排除库头?

Posted

技术标签:

【中文标题】如何从我的 Visual Studio 静态代码分析中排除库头?【英文标题】:How do I exclude library headers from my Visual Studio static code analysis? 【发布时间】:2012-04-17 12:43:10 【问题描述】:

我已设置 buildbot 以使用 /analyze 标志编译我的 Qt/C++ 应用程序。

然而,分析也在深入研究我不关心的 qt 标头:

c:\qt\qt-everywhere-opensource-src-4.8.1\src\corelib\tools\qvector.h(547) : warning C6011: Dereferencing NULL pointer 'x.p': Lines: 474, 475, 476, 477, 478, 480, 491, 493, 497, 498, 499, 500, 503, 504, 518, 519, 520, 521, 522, 525, 545, 547

批量排除这些文件的最佳方法是什么?

(请注意我没有使用 IDE,我正在寻找命令行、开关或代码更改)

【问题讨论】:

How to suppress warnings in external headers in Visual C++的可能重复 【参考方案1】:

您可以在代码中使用 #pragma warning 禁用特定代码块的所有代码分析警告。 MSDN 提供了以下示例:

#include <codeanalysis\warnings.h>
#pragma warning( push )
#pragma warning ( disable : ALL_CODE_ANALYSIS_WARNINGS )
#include <third-party include files here>
#pragma warning( pop )

(有关详细信息,请参阅"How to: Enable and Disable Code Analysis for Specific C/C++ Warnings"。)

据我所知,仅使用命令行选项无法禁用来自特定头文件的警告。

【讨论】:

不幸的是,编译指示在第一次包含标头时禁用分析警告。这意味着如果您的第三方包含 Windows 标头,您以后不会收到任何分析警告。在我的例子中,一个这样的头文件是&lt;boost/date_time/gregorian/gregorian.hpp&gt;——当然这同样适用于 C++ 标准库头文件。这使得ALL_CODE_ANALYSIS_WARNINGS 有点无用,或者再次非常难以使用......从这个意义上说,我发现启用所有警告并使用允许按路径分组的错误列表输出窗口更容易。 这太优雅了,非常感谢! @klaustriendl 我猜可以用 PCH 文件修复。

以上是关于如何从我的 Visual Studio 静态代码分析中排除库头?的主要内容,如果未能解决你的问题,请参考以下文章

如何从visual studio代码(拉/推)访问git gist?

DataTable可视化工具从我的Visual Studio中消失了

Visual Studio:如果启用了编译器选项,如何测试(在代码/静态断言中)

Visual Studio 11 Ultimate 静态分析显示无输出

静态库(.lib)Visual Studio 的代码覆盖率

如何在静态库 (Visual Studio) 中嵌入图标 (.ico)