最近,我们发现我们的一个外部库 (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/