2

我正在运行 Visual Studio 2017。我正在尝试将一种名为 ChaiScript 的脚本语言添加到我的项目中,但是当我打开 /Wall 时它会生成很多警告,而且我也将警告视为错误(我更喜欢这个保持这种状态)。

所以我想我会尝试在包含 ChaiScript 头文件时暂时禁用所有警告(只需要包含 1 个文件)。一开始我是这样做的...

#pragma warning( disable : 4061 )
#pragma warning( disable : 4068 )
#pragma warning( disable : 4191 )
#pragma warning( disable : 4355 )
#pragma warning( disable : 4365 )
#pragma warning( disable : 4371 )
#pragma warning( disable : 4464 )
#pragma warning( disable : 4514 )
#pragma warning( disable : 4571 )
#pragma warning( disable : 4623 )
#pragma warning( disable : 4625 )
#pragma warning( disable : 4626 )
#pragma warning( disable : 4668 )
#pragma warning( disable : 4710 )
#pragma warning( disable : 4774 )
#pragma warning( disable : 4820 )
#pragma warning( disable : 5026 )
#pragma warning( disable : 5027 )
#include <chaiscript\chaiscript.hpp>

这行得通,我可以编译......但是,我想在编译过程的其余部分重新启用这些警告......所以我把它变成了这个......

#pragma warning( push )
#pragma warning( disable : 4061 )
#pragma warning( disable : 4068 )
#pragma warning( disable : 4191 )
#pragma warning( disable : 4355 )
#pragma warning( disable : 4365 )
#pragma warning( disable : 4371 )
#pragma warning( disable : 4464 )
#pragma warning( disable : 4514 )
#pragma warning( disable : 4571 )
#pragma warning( disable : 4623 )
#pragma warning( disable : 4625 )
#pragma warning( disable : 4626 )
#pragma warning( disable : 4668 )
#pragma warning( disable : 4710 )
#pragma warning( disable : 4774 )
#pragma warning( disable : 4820 )
#pragma warning( disable : 5026 )
#pragma warning( disable : 5027 )
#include <chaiscript\chaiscript.hpp>
#pragma warning( pop )

现在我认为这会成功,所以它会在没有警告的情况下编译标题,然后返回检查这些警告......但似乎在我这样做之后......我仍然收到 4 个 C4710 警告......我我做错了什么?

https://i.imgur.com/RuxboQC.png

4

2 回答 2

1

在所有禁用之前添加一个#pragma warning(push, 3),在包含之后添加一个#pragma warning(pop)。

于 2017-11-28T21:43:24.653 回答
0

在这种特殊情况下,问题很可能是,尽管在编译函数定义时禁用了警告,但在编译器可以选择内联它的情况下,它被重新启用。似乎没有一个切实可行的解决方案。

Microsoft 列出了默认关闭的警告/W4和之间的区别在于/Wall启用/Wall默认关闭警告。默认关闭警告是默认关闭的,因为它们的价值很低和/或因为您可能会得到很多误报。偶尔检查您的项目/Wall以查看其中是否有任何有用的信息可能会很有启发性,但始终启用它们似乎并不实际。

我非常喜欢将警告级别推到尽可能高的位置,但这/Wall对我来说太远了。我建议无处不在/W4/WX如果需要第三方代码,请下拉以按照您的说明/W3使用。#pragma warning(push/pop)根据我的经验,所有 Microsoft 标头都在/W4.

于 2017-11-28T22:05:18.663 回答