警告は、valaによって生成されたcコードによって生成されます。
警告:イニシャライザの周りに括弧がない
コードは動作しますが、警告は迷惑です。警告によって参照されるvalaコードは
struct Position {uint x; uint y;}
private static Position positions[8];
生成されたCコードは
static Position det_positions[8] = {0};
半ダースの異なる方法で位置を初期化しようとしましたが、警告を満たす構文を取得できないようです。これは GCCバグ53119 ですか、それとも修正する方法はありますか?
はい、これは GCCバグ53119 に関連しているようです。 C宣言を{{0}}
に変更すると消滅します。オプションは次のとおりです。
sed
などを使用して、その行で{{0}}
の代わりに{0}
を使用します。extern
を宣言し、別の場所でC定義を記述します。 (#2の永続バージョン。)struct foo { int bar; Position positions[8]; } static foo position_holder
や{0}
のようなことをすると、position_holder.bar
が初期化され、問題はなくなり、警告は消えます。この警告は、-Wallコンパイラフラグが設定された状態で、多次元配列が線形配列として扱われている場合にも表示されます(ただし、正しく、コードは完全に実行されます)。
例えば
char array[5][10][2] = {\
"0","0","0","0","0","0","0","0","0","0",\
"1","1","1","1","1","1","1","1","1","1",\
"2","2","2","2","2","2","2","2","2","2",\
"3","3","3","3","3","3","3","3","3","3",\
"4","4","4","4","4","4","4","4","4","4" };
これにより、警告が生成されます。
以下に示すように、次の変更を行って警告を削除します
char array[5][10][2] = {\
{"0","0","0","0","0","0","0","0","0","0" },\
{"1","1","1","1","1","1","1","1","1","1"},\
{"2","2","2","2","2","2","2","2","2","2"},\
{"3","3","3","3","3","3","3","3","3","3"},\
{"4","4","4","4","4","4","4","4","4","4"} };
私が間違っている場合は私を修正してください。