Visual Studio 禁用特定目录中文件的警告

Posted

技术标签:

【中文标题】Visual Studio 禁用特定目录中文件的警告【英文标题】:Visual Studio disable warnings for files in specific directories 【发布时间】:2020-08-28 04:02:06 【问题描述】:

我们有一个 VS 2019 项目,其中包括我们添加到项目中的外部源库。例如,我们正在使用 WTL(Windows 模板库)。在编译期间,这些库会产生大量警告(尤其是对于没有默认值的成员)。

对于这些文件,我们希望完全禁用警告,或者至少指定某些目录应该排除哪些警告,因为

    我们不会更改该代码 警告太多了,我们很容易从自己的代码中遗漏一些我们应该解决的问题

我看到一篇关于您应该能够传递一些标志以禁用“外部”文件警告的帖子,但我在项目设置中看不到任何选项。

【问题讨论】:

How to suppress warnings in external headers in Visual C++ 回答你的问题了吗? 根据Broken Warnings Theory,他们已经对/external:I <path>/external:W<level> 进行了试验,以便能够在外部标头上设置不同的警告级别。在文章中,有人说应该使用/experimental:external,虽然我的 VS2019 似乎仍然可以识别我正在尝试做的部分事情,但我不太清楚它是否仍然受支持。 【参考方案1】:

有几种方法可以禁用警告:

    Project Properties->C/C++->General->Warning Level->select level

这里是Warning Level

关闭所有警告 (/W0):关闭所有警告的显示 消息。级别 1 (/W1):显示严重警告消息。 2级 (/W2):显示1级警告和一些不太严重的警告,例如 作为关于隐藏班级成员的警告。这是默认警告 命令行上的级别。 3 级 (/W3):显示 2 级警告 和一些不太严重的警告,比如关于表达式的警告 总是评估为真或假。级别 4 (/W4):显示所有 3 级警告和信息性警告。

或者您可以选择禁用 Project Properties->C/C++->Advanced->Disable Specific Warnings 中的特定警告

    您可以使用warning pragma。

语法:

#pragma warning(
    warning-specifier : warning-number-list
    [; warning-specifier : warning-number-list ... ] )
#pragma warning( push [ , n ] )
#pragma warning( pop )

另外,您可以向微软咨询How to: Enable and Disable Code Analysis for Specific C/C++ Warnings。

启用或禁用代码分析警告

2.1.创建一个头文件,列出所有代码分析警告及其初始状态,如下代码所示:

// WarningState.h
   #pragma warning ( default : 6001 )
   #pragma warning ( disable : 6011 )
// more warnings here 
// end of file

2.2.在应用程序头文件中包含WarningState.h。在这种情况下,MyApplication.h 代表头文件。

// MyApplication.h file
   #include "WarningState.h"
// ...
// end of file

2.3.在源代码文件中包含MyApplication.h文件。在这种情况下,MyApplication.cpp 代表源文件。

// MyApplication.cpp file
#include "MyApplication.h"

2.4.要修改警告状态,在.cpp文件中使用pragma warning-specifier,如下代码所示:

// MyApplication.cpp file
#include "MyApplication.h"
#pragma warning ( disable: 6001 )
#pragma warning ( default : 6001 )

禁用包含的第三方文件的所有代码分析警告

将以下代码添加到您的头文件中。

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

【讨论】:

这很接近,但我们根据需要将这些第三方头文件包含在许多文件中。我不明白我们如何避免到处复制粘贴这段代码。 我尝试了你的最后一个示例,使用编译指示警告(推送)并弹出我的 stdafx.h,但仍然收到警告。 我收回了。我做了一个完整的重建,它似乎工作!谢谢。

以上是关于Visual Studio 禁用特定目录中文件的警告的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中禁用特定代码块的代码格式

如何在 Visual Studio 2015 中禁用 C# 6 支持?

visual studio 2017没法安装,总在visual studio installer界面闪推

为啥我不能在 Visual Studio 中禁用预编译头文件?

如何在 Visual Studio 2008 中禁用 XAML 文件的“代码分析”?

通过 Visual Studio 项目文件禁用驱动程序签名