MinGW 5.1.0 似乎不再抑制警告

Posted

技术标签:

【中文标题】MinGW 5.1.0 似乎不再抑制警告【英文标题】:MinGW 5.1.0 no longer seems to suppress warnings 【发布时间】:2015-06-24 22:03:59 【问题描述】:

我正在运行 Windows 7.1 64 位、Boost 1.58.0 和(最近)MinGW 5.1.0 64 位。

当我之前运行 MinGW 4.9.2 时,我使用了以下内容

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
#include "boost/asio/ip/host_name.hpp" // for host_name()
#pragma GCC diagnostic pop

抑制不必要的警告,并且它在大多数情况下都有效。如果代码中存在合法错误,无论如何都会显示这些被抑制的警告——但我可以忍受。

昨天,我升级到 MinGW 5.1.0 64 位。上面显示的编译指示似乎不再抑制警告。我在 Google 上找不到任何表明发生了变化的内容。

我真的很想让这个功能再次工作,因为我使用的 Boost Test 有几十个“std::auto_ptr is deprecated”警告。

【问题讨论】:

请正确标记。没有像MinGW 4.9.2 这样的东西,(而MinGW-5.1.0MinGW GCC-3.4.5 的一个早已失效的安装程序)。也许你的意思是mingw-w64 GCC-4.9.2mingw-w64 GCC-5.1.0,但MinGW 都不是。 我对 gcc 版本 5.2.0(x86_64-posix-seh-rev0,由 MinGW-W64 项目构建)和 boost/asio 有同样的问题。但是,以下代码可以正常工作(#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" void f() int x(0); #pragma GCC diagnostic pop) 【参考方案1】:

查看错误:

In file included from C:/C++/MinGW-w64/5.1.0/i686-w64-mingw32/include/c++/memory:81:0,
             from ../common/include/boost/asio/detail/addressof.hpp:21,
             from ../common/include/boost/asio/detail/handler_alloc_helpers.hpp:19,
             from ../common/include/boost/asio/detail/bind_handler.hpp:19,
             from ../common/include/boost/asio/detail/wrapped_handler.hpp:18,
             from ../common/include/boost/asio/io_service.hpp:24,
             [...]:
boost/smart_ptr/shared_ptr.hpp:549:38: warning: 'template<class> class std::auto_ptr' is deprecated [-Wdeprecated-declarations]
     this_type( static_cast< std::auto_ptr<Y> && >( r ) ).swap( *this );
                                  ^

您可以看到编译器标志不再是-Wunused-variable,而是现在-Wdeprecated-declarations。 在#pragma 中反映这一点使它再次为我工作。

【讨论】:

以上是关于MinGW 5.1.0 似乎不再抑制警告的主要内容,如果未能解决你的问题,请参考以下文章

抑制 R 中的 C 警告消息

Matlab:抑制uiputfile的警告对话框

如何抑制 StyleCop 警告?

抑制 PDO 警告

C#:有啥方法可以抑制编译器错误,类似于抑制警告消息?

如何抑制 LLVM 自动合成警告?