C++ VS2017 C++;:如何在“警告”之后消除警告;正在生成代码…”;

C++ VS2017 C++;:如何在“警告”之后消除警告;正在生成代码…”;,c++,visual-studio-2017,compiler-warnings,suppress-warnings,C++,Visual Studio 2017,Compiler Warnings,Suppress Warnings,在MSVC输出窗口显示“生成代码…”后,我收到警告 如何在不禁用整个解决方案的情况下抑制这些警告?我自己无法触摸代码,因此无法修复它们 根据,编译器此时正在生成机器代码。那么,这些警告是如何产生的呢?毕竟,基本的编译已经完成了 更新: 在项目设置中将全局警告级别设置为/W3而不是/W4会阻止这些警告(因为它们是级别4警告) 除了全局设置/W3之外,我还可以显式地在本地禁用关键组件的警告,包括: #pragma warning(push) #pragma warning(disable : 470

在MSVC输出窗口显示“生成代码…”后,我收到警告

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

根据,编译器此时正在生成机器代码。那么,这些警告是如何产生的呢?毕竟,基本的编译已经完成了

更新:

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

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

#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)
但奇怪的事情来了:通过本地设置/W3(甚至/W1)

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


似乎按下并弹出一个
警告禁用按钮
在某种程度上与按下一个新的警告级别不同。

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

根据以下答案,在该阶段不进行基本编译:

此外,如果这些不是您的文件,您应该向开发人员提出问题。但这是暂时的

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

根据以下答案,在该阶段不进行基本编译:

此外,如果这些不是您的文件,您应该向开发人员提出问题。但这是暂时的

因此,从我之前的更新开始,局部降低警告级别似乎不会持续到“生成代码”阶段

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

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

在我看来,这几乎像是编译器中的一个bug。

因此,在我之前的更新中,局部降低警告级别似乎并没有持续到“生成代码”阶段

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

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

在我看来,这几乎像是编译器中的一个bug。

您自己的头文件是
ipinctrlimpl.h
iwatchdogimpl.h
吗?如果是这样的话,你应该解决问题,而不是抑制它。这些是我们公司内核代码的模板,我不想碰它们。编译器在开始生成代码时发现这些问题是很正常的。解析器还不知道优化器将要做什么。请记住,尽管它们出现在.h文件中,但它们可能很容易由您自己的代码生成。这些是内联函数,因此您传递的参数非常重要。
ipinctrlimpl.h
iWatchDoImpl.h
是您自己的头文件吗?如果是这样的话,你应该解决问题,而不是抑制它。这些是我们公司内核代码的模板,我不想碰它们。编译器在开始生成代码时发现这些问题是很正常的。解析器还不知道优化器将要做什么。请记住,尽管它们出现在.h文件中,但它们可能很容易由您自己的代码生成。这些是内联函数,所以传递的参数非常重要。我知道pragma warning(push)。我经常使用它来抑制其他人的警告,然后再包含他们的标题。我已经把这个pragma放在了包含这些关键头的地方,但是警告仍然存在。因此,VisualStudio一定在某个地方做了一些我无法控制的事情。没有标题是什么意思。也许是其他的东西包括了你看不到的内容。我在你回答的时候编辑了我上面的评论,对不起。我启用了“显示包含”,跟踪了关键包含的每个实例,并禁用了该包含分支的警告。我仍然收到警告。请确保您提供了正确的级别,或者编辑您的帖子以显示您的用法根据该MSDN页面,pragma的最低支持值为1,而不是0,我在我的项目中使用了该值,请参阅我的主要帖子。但是,我在web上找到了许多来源,指出可以使用0来完全禁用警告。我知道pragma warning(push)。我经常使用它来抑制其他人的警告,然后再包含他们的标题。我已经把这个pragma放在了包含这些关键头的地方,但是警告仍然存在。因此,VisualStudio一定在某个地方做了一些我无法控制的事情。没有标题是什么意思。也许是其他的东西包括了你看不到的内容。我在你回答的时候编辑了我上面的评论,对不起。我启用了“显示包含”,跟踪了关键包含的每个实例,并禁用了该包含分支的警告。我仍然收到警告。请确保您提供了正确的级别,或者编辑您的帖子以显示您的用法根据该MSDN页面,pragma的最低支持值为1,而不是0,我在我的项目中使用了该值,请参阅我的主要帖子。但是,我在web上找到了许多来源,指出可以使用0来完全禁用警告。仅供参考,我现在发现,通过“警告推送”在本地降低警告级别并没有达到预期效果。在我的解决方案中,禁止在推/弹出围栏外发出警告,这是不应该发生的!!!可能是预处理器中的错误?我不知道。我知道的原因是,在push/pop中显式地在本地禁用某些警告会如预期的那样起作用。仅供参考,我现在发现,通过“警告推送”在本地降低警告级别根本不会如预期的那样起作用。在我的解决方案中,警告
#pragma warning(push, 1)
#include "CriticalInclude.h"
#pragma warning(pop)
#pragma warning(push)
#pragma warning(disable : 4701 4702)
#include "CriticalInclude.h"
#pragma warning(pop)