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

4
我们有一个VS 2019项目,其中包含我们添加到项目中的外部源代码库。例如,我们正在使用WTL(Windows模板库)。在编译时,这些库会产生大量警告(特别是对于没有默认值的成员)。
对于那些文件,我们希望完全禁用警告,或者至少指定应该从某些目录中排除哪些警告,因为:
  1. 我们不会更改那些代码
  2. 有很多警告,我们很容易忽略我们自己代码中应该解决的问题
我看到一篇关于应该能够传递以禁用"外部"文件警告的某些标志的帖子,但我在项目设置中没有看到任何选项。

如何在Visual C++中抑制外部头文件中的警告是否回答了您的问题? - Ted Lyngmo
1
根据破碎警告理论,他们尝试使用/external:I <path>/external:W<level>来设置外部头文件的不同警告级别。文章中提到应该使用/experimental:external,虽然我的VS2019似乎仍然能够识别我正在尝试做的事情的一部分,但我无法确定它是否仍然受支持。 - Ted Lyngmo
1个回答

1

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

  1. 项目属性->C/C++->常规->警告级别->选择级别

这是 Warning Level

  • 关闭所有警告 (/W0):关闭所有警告消息的显示。级别 1 (/W1):显示严重的警告消息。级别 2 (/W2):显示级别 1 的警告和一些不太严重的警告,例如有关隐藏类成员的警告。这是命令行上的默认警告级别。级别 3 (/W3):显示级别 2 的警告和一些不太严重的警告,例如始终计算为 true 或 false 的表达式的警告。级别 4 (/W4):显示所有级别 3 的警告和信息性警告。

或者您可以选择在 项目属性->C/C++->高级->禁用特定警告 中禁用特定的警告。

  1. 您可以使用 warning pragma

语法:

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

另外,您可以参考微软的如何:启用和禁用特定 C/C++ 警告的代码分析

要启用或禁用代码分析警告:

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 )

这很接近,但我们根据需要在许多文件中包含这些第三方头文件。我不知道如何避免到处复制粘贴此代码。 - bpeikes
我尝试了您的最后一个示例,在我的stdafx.h中使用#pragma warning(push)和pop,但仍然收到警告。 - bpeikes
我撤回之前的话。我进行了完整的重建,现在看起来可以工作了!谢谢。 - bpeikes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接