暂时禁用Visual Studio中的编译警告包含

时间:2017-11-28 21:09:25

标签: c++ visual-studio-2017 pragma chaiscript

我正在运行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

2 个答案:

答案 0 :(得分:0)

在所有禁用之前添加#pragma警告(push,3),在include之后添加#pragma警告(pop)。

答案 1 :(得分:0)

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

Microsoft列出warnings that are off-by-default/W4/Wall之间的区别在于/Wall启用了默认的默认警告。默认的默认警告是默认值,因为它们价值较低和/或因为您可能会获得许多误报。使用/Wall偶尔检查一下您的项目可能会有所帮助,看看那里是否有任何有用的信息,但让它们始终启用似乎并不可行。

我非常喜欢将警告级别推到尽可能高的水平,但/Wall对我来说是一个太过分了。我建议/W4到处/WX /W3。如果需要第三方代码,请使用#pragma warning(push/pop)下拉至/W4,如您所示。根据我的经验,所有Microsoft标头都在http://0.0.0.0...完全编译。