Hatena::ブログ(Diary)

shouhの日記

2014-05-10

C言語の構造体の初期化 sturct hoge_t hoge = {0} 部分で 初期化子を欠いています(missing initializer) の警告が出る件

「-Wextra」は「-Wmissing-field-initializers」を含む。この「-Wmissing-field-initializers」は、構造体の初期化に漏れがあると警告を出す。

Warn if a structure's initializer has some fields missing. For example, the following code causes such a warning, because x.h is implicitly zero:

struct s { int f, g, h; };
struct s x = { 3, 4 };

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

上記例で言えば x.h の部分が初期化されてない。

sturct hoge_t hoge = {0}; は構造体を初期化するイディオムで、意味的には「最初のメンバを 0 で初期化(別の値を指定すればそれで初期化できる)して、残りメンバは(言語仕様により) 0 で初期化する」だったはず。構文としては最初のメンバ部分の初期化してしていないため、漏れがあるとみなされてしまうようだ。

警告を消すには「-Wno-missing-field-initializers」を使えばよいが…もうちょっとキレイな回避策はないものか。

ちなみにコンパイラgcc 4.4.7。