有谁能告诉我如何抑制由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
答案 0 :(得分:3)
一种方法是在GCC中使用built-in #pragma
s禁用警告,例如
#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
在命令行中禁用此行为。