MSVC输出窗口显示"正在生成代码…"后,我收到警告。
1>Note: including file: D:FOOINCippcc.h
1>Generating Code...
1>d:FOOincipinctrlimpl.h(130): warning C4701: potentially uninitialized local variable 'hResult' used
1>d:FOOinciwatchdogimpl.h(158): warning C4702: unreachable code
1> Creating library ....LIB/FOO.lib and object ....LIB/FOO.exp
1>FOO.vcxproj -> D:FOOFOO.dll
1>Done building project "FOO.vcxproj".
如何在不为整个解决方案禁用这些警告的情况下抑制这些警告?我自己不能触摸代码,所以修复它们是没有选择的。
根据这篇文章,编译器此时正在生成机器代码。那么,这些警告是怎么产生的呢?毕竟,基本的编译已经完成了。
更新:
在项目设置中将全局警告级别设置为/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++';生成代码';,这是什么意思?
此外,如果这些不是您的文件,您应该向开发人员提出问题。但这是暂时的
如何在Visual C++中抑制外部标头中的警告
因此,在我之前的更新中,本地降低警告级别似乎并没有持续到"生成代码"阶段。
#pragma warning(push, 1)
#include "CriticalInclude.h"
#pragma warning(pop)
然而,在本地明确禁用这些警告确实会对生成代码阶段产生影响:
#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)
对我来说,这几乎像是编译器中的一个错误。