c++ - 在 MSVC 2017 中检测警告

标签 c++ visual-c++ compiler-warnings dlib suppress-warnings

最近,我们发现我们的一个外部库 (DLib) 在全局范围内抑制了警告。编写以下代码会给我们一个警告:

[[deprecated]] int findDeprecated() { return 42; }
int test = findDeprecated();

包含 dlib header 会抑制警告:

#include <dlib/matrix.h>
[[deprecated]] int findDeprecated() { return 42; }
int test = findDeprecated();

必须触发所有这些警告才能审查我们的外部库,这非常麻烦,而且不容易集成到我们的代码库中。 因此,我们想创建一个概念上看起来像这样的新测试:

#include <dlib>
#include <boost>

static_assert(getWarningLevel(4996) == 4, "Deprecated Warning Was suppressed");

但是,通过搜索,我们找不到请求警告级别的方法,因为搜索引擎总是告诉我们如何启用警告。 是否存在检索警告级别的方法?

对答案的一些限制:

  • 我们只对 Visual Studio 2017(或更高版本)感兴趣
  • 加分点:还有clang-cl的解决方案

最佳答案

您可以通过以下方式保存和恢复您的警告级别:

#pragma warning(push) // Save current warning state
#include <offendingheaderfile.h>
#pragma warning(pop)  // Restore saved warning state

关于c++ - 在 MSVC 2017 中检测警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56889867/

相关文章:

c++ - 使用重新定义的 PS1 环境变量运行 bash

c++ - 如何使用 CreateFile API 打开分区?

c++ - 错误 LNK2019 : external symbol

c++ - 维护状态的正则表达式库,逐字符输入并在找到匹配项时返回 true

c++ - 如何以编程方式获取 MSVC 中任何类型的函数的修饰名称

c++ - 反汇编 Visual C++ 中我的函数及其参数的名称

c++ - _wtoi 返回零 : input zero or non-numerical input?

objective-c - 不兼容的指针类型警告(在 Objective-C 中)

java - 不兼容的对象类型 - Java

c++ - 使用 std::uint8_t 作为键初始化 map 时的警告