1

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

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找到

4

1 回答 1

4

一种方法是使用内置的#pragmas禁用 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.

于 2014-12-08T09:16:27.920 回答