繁体   English   中英

如何抑制Boost.Log和GCC 4.4引起的“警告:缺少初始化程序”?

[英]How to suppress “warning: missing initializer” caused by Boost.Log and GCC 4.4?

谁能告诉我如何抑制Boost.Log和GCC 4.4.7生成的以下警告消息? 我的项目以C ++ 11模式构建(在GCC 4.4.7中为-std=c++0x )。

src/Logger.cc:7: warning: missing initializer for member ‘boost::log::v2_mt_posix::expressions::attribute_keyword<tag::severity, boost::phoenix::actor>::proto_expr_’

其中src/Logger.cc是我的日志记录类的源文件,它是Boost.Log的包装。 第7行使用Boost.Log宏之一,如下所示。 Logger::ESeverityLevel是在Logger.h定义的枚举。

BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", Logger::ESeverityLevel)

该宏可以如下扩展。

namespace tag    {\
        struct severity :\
            public ::boost::log::expressions::keyword_descriptor\
        {\
            typedef Logger::ESeverityLevel value_type;\
            static ::boost::log::attribute_name get_name() { return ::boost::log::attribute_name("Severity"); }\
        };\
    }\
    typedef ::boost::log::expressions::attribute_keyword< tag::severity > severity_type;    const severity_type severity = {};

看上去severity_type的初始化会发出此警告,而对于Clang(Apple LLVM 6.0版)则有效。

可以在http://theboostcpplibraries.com/boost.log#ex.log_05中找到此宏的官方示例代码。

一种方法是使用内置的#pragma禁用GCC中的警告,例如

#pragma GCC diagnostic push      // Save the current warning state
#pragma GCC diagnostic ignored "-Wmissing-field-initializers" // Disable the warning you're getting

...
// offending code
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", Logger::ESeverityLevel)
...

#pragma GCC diagnostic pop        // Restore previous default behaviour

您也可以在命令行使用-Wno-missing-field-initializers禁用此行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM