在MSVC 2017中检测警告

时间:2019-07-04 14:17:38

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

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

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

包含dlib标头可禁止显示警告

#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提供解决方案

1 个答案:

答案 0 :(得分:3)

您可以使用以下方法保存和恢复警告级别:

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