在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
方面与推送新警告级别有所不同。
答案 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)
在我看来,这几乎就像是编译器中的错误。