【问题标题】:Temporarily Disable Compile Warnings in Visual Studio for Includes在 Visual Studio 中临时禁用包含的编译警告
【发布时间】:2017-11-29 06:05:18
【问题描述】:

我正在运行 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 警告。 .. 我是不是做错了什么?

【问题讨论】:

  • 还有其他领域包含 chaiscript 吗?我假设您在开始尝试包含 chaiscript 之前没有警告?
  • 从字面上看,我的程序只是一个带有上述代码的空 .h 文件,然后是一个包含该 .h 文件的 .cpp。我只是设法将错误减少到 4 个警告,更新了我的帖子。所以不,没有。
  • 如果内联发生在链接时,链接器选择如何解释#pragma warning 可能是不直观的。例如,在您的源文件(包括这个头文件)被编译之后,链接就很好了。当时#pragma warning( pop )已经找到并编译。虽然我不确定 VS 何时选择执行内联。
  • 我想我已经得出结论,这可能是一个 VS2017 错误...如果我在 C4710 推送之外禁用了它,它可以工作...

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    我非常喜欢将警告级别推到尽可能高的位置,但/Wall 对我来说太过分了。我推荐/W4/WX 无处不在。如果需要第三方代码,请使用#pragma warning(push/pop) 下拉至/W3,如您所示。以我的经验,所有 Microsoft 标头都在 /W4 处干净地编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2013-06-02
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多