【发布时间】:2019-04-23 00:30:48
【问题描述】:
在 MSVC 输出窗口显示“正在生成代码...”后,我收到警告。
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 的处理方式与推送新的警告级别不同。
【问题讨论】:
-
ipinctrlimpl.h和iwatchdogimpl.h是你自己的头文件吗?如果是这样,您应该解决问题而不是压制它。 -
这些是我们公司内核代码的模板,我不碰。
-
编译器在开始生成代码时发现这些问题是很正常的。解析器还不知道优化器要做什么。请记住,尽管它们出现在 .h 文件中,但它们可能很容易由您自己的代码生成。这些是内联函数,因此您传递的参数很重要。
标签: c++ visual-studio-2017 compiler-warnings suppress-warnings