VS2017 C ++:如何在“正在生成代码...”之后禁止警告

时间:2018-11-20 14:23:50

标签: c++ visual-studio-2017 compiler-warnings suppress-warnings

在MSVC-Output窗口显示“正在生成代码...”后,我得到警告。

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方面与推送新警告级别有所不同。

2 个答案:

答案 0 :(得分:2)

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

根据此答案,当时尚未完成基本编译:
VC++ 'Generating Code', what does it mean?

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

答案 1 :(得分:0)

因此,在我之前的更新中,本地降低警告级别似乎没有延续到“生成代码”阶段。

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

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

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

在我看来,这几乎就像是编译器中的错误。