【发布时间】:2014-03-06 16:18:01
【问题描述】:
我想知道为什么在一种情况下我收到有关初始化的警告,而在另一种情况下却没有。代码位于 C++ 源文件中,并使用 GCC 4.7 和 -std=c++11。
struct sigaction old_handler, new_handler;
上面会产生 NO 警告,带有 -Wall 和 -Wextra。
struct sigaction old_handler={}, new_handler={};
struct sigaction old_handler={0}, new_handler={0};
以上会产生警告:
warning: missing initializer for member ‘sigaction::__sigaction_handler’ [-Wmissing-field-initializers]
warning: missing initializer for member ‘sigaction::sa_mask’ [-Wmissing-field-initializers]
warning: missing initializer for member ‘sigaction::sa_flags’ [-Wmissing-field-initializers]
warning: missing initializer for member ‘sigaction::sa_restorer’ [-Wmissing-field-initializers]
我已经阅读了How should I properly initialize a C struct from C++?、Why is the compiler throwing this warning: "missing initializer"? Isn't the structure initialized? 以及像http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36750 这样的错误报告。我不明白为什么未初始化的结构 不 生成警告,而初始化的结构 生成警告。
为什么未初始化的结构不生成警告;为什么初始化的结构正在生成一个警告?
【问题讨论】:
-
你所说的初始化只是部分初始化,因此是警告。
标签: c++11 gcc initialization compiler-warnings member