禁用 /W4 警告以进行提升

Posted

技术标签:

【中文标题】禁用 /W4 警告以进行提升【英文标题】:Disable /W4 warnings for boost 【发布时间】:2011-03-22 11:26:36 【问题描述】:

如何禁用来自 boost 库的所有 MSVC 警告?

我知道我可以在它们发生的地方禁用特定的警告等......但它会使我的代码变得混乱,如果我使用 boost 宏,那么它们似乎不起作用。我想有一个简单的方法来告诉我的编译器不要给我关于 boost 的警告。这可能吗?

另一方面,我有点惊讶的是 boost 库并没有在内部禁用所有这些警告,以便我们的用户可以“开箱即用”地使用它。

【问题讨论】:

【参考方案1】:

他们非常努力地避免警告,但一些编译器会警告形式上正确的代码,只是有点“可疑”。如果您更改代码以使警告静音,则另一个编译器可能会针对该代码发出警告!

对于 Boost 代码和各种编译器有一个警告策略 https://svn.boost.org/trac/boost/wiki/Guidelines/WarningsGuidelines

他们还特别注意不要禁用警告,因为您的代码中的某些部分可能警告实际上是正确的。如果 Boost 禁用警告,您可能在代码中找不到错误!

【讨论】:

【参考方案2】:

您可以通过更改默认属性页来禁用所有个项目的警告:

打开任何项目。 点击 查看-> 物业经理。 在 物业经理(可能沿 左栏),展开项目,然后 展开其中一个配置文件,然后 双击其中一个类别 您的所有项目都将使用: Microsoft.Cpp.Win32.user, 应用程序,或者可能是 Core Windows 图书馆。 这会调出 Properties 页面,但适用于您编写或将要编写的所有代码。设置 适当的预处理器定义 并禁用 /wp64 或任何你 需要为单个项目做。

由于可能不希望为所有项目禁用这些警告,因此您似乎可以禁用 visual_c.hpp 中的警告,如下所述:Boost warnings with VC++ 9。但是每次更新库时都必须进行更改。

【讨论】:

【参考方案3】:

首先想到的是创建一个特殊的头文件来放置所有的 Boost #includes。这些#includes 应该被#pragma 块包围

#pragma warning(push, 0)        

#include <boost/bimap.hpp>
#include <boost/function.hpp>

#pragma warning(pop)

这种方式的缺点:一些编译时效率低下

【讨论】:

这样的问题是当您使用标头中的模板时会出现一些警告。到那时,警告再次出现。 @Bo:我以前不知道。我想知道为什么会这样。你是这个原因吗?据我了解,patch 修复了 Boost.Thread 的问题

以上是关于禁用 /W4 警告以进行提升的主要内容,如果未能解决你的问题,请参考以下文章

如何在Visual C ++中禁止外部标头中的警告

MKPinAnnotationView 禁用选择/突出显示但不提升和拖动

GCC,奇怪的整数提升方案

提升 microsec_time_clock.hpp 警告 C4244

CentOS7的性能是否提升很多

是否可以在objective-c中禁用自动类型提升