VS2017 C++:如何在 "Generating Code..." 之后抑制警告

VS2017 C++: Howto supress warnings after "Generating Code..."

我在 MSVC 输出 window 显示 "Generating Code..." 后收到警告。

1>Note: including file: D:\FOO\INC\ippcc.h
1>Generating Code...
1>d:\FOO\inc\ipinctrlimpl.h(130): warning C4701: potentially uninitialized local variable 'hResult' used
1>d:\FOO\inc\iwatchdogimpl.h(158): warning C4702: unreachable code
1>   Creating library ..\..\LIB/FOO.lib and object ..\..\LIB/FOO.exp
1>FOO.vcxproj -> D:\FOO\FOO.dll
1>Done building project "FOO.vcxproj".

如何在不为整个解决方案禁用这些警告的情况下抑制这些警告?我自己无法触摸代码,因此无法修复它们。

根据 this post,编译器此时正在生成机器代码。那么这些警告怎么可能产生呢?毕竟基本的编译已经做好了

更新:

在项目设置中将全局警告级别设置为 /W3 而不是 /W4 可以防止这些警告(因为它们是 4 级警告)。

除了全局设置 /W3,我还可以在本地显式禁用关键警告包括:

#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)

但奇怪的事情来了:通过

本地设置/W3(甚至/W1)
#pragma warning(push, 3)
#include "CriticalInclude.h"
#pragma warning(pop)

不会阻止这些警告。为什么?

似乎推送和弹出 warning disable 的处理方式与推送新的警告级别不同。

您不应该抑制警告,而应该处理它们。
如果您有无法访问的代码,为什么要把它放在那里?
确保初始化变量。

根据这个答案,基本编译在那个阶段没有完成:
VC++ 'Generating Code', what does it mean?

此外,如果这些不是您的文件,您应该向开发人员提出问题。但这是暂时的
How to suppress warnings in external headers in Visual C++

因此,在我之前的更新中,本地降低警告级别似乎并没有延续到 "Generating Code"-Stage。

#pragma warning(push, 1)
#include "CriticalInclude.h"
#pragma warning(pop)

但是,在本地明确禁用这些警告确实会影响生成代码阶段:

#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)

对我来说,这几乎像是编译器中的一个错误。