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.0
是MinGW GCC-3.4.5
的一个早已失效的安装程序)。也许你的意思是mingw-w64 GCC-4.9.2
和mingw-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 似乎不再抑制警告的主要内容,如果未能解决你的问题,请参考以下文章