e156.c

初期化に「{」必要


struct tag { struct { int x ; int y ; } s[2] ; int unuse ; } ;
修正前 struct tag R1 = { {100}, /* LOOK */ {200} } ;
修正後 struct tag R2 = { { {100}, {200} } } ;

解説 K&R-Cの構造体初期化の仕様と ANSI-Cの構造体初期化の仕様は、異なります。 この例では、 K&R-Cでも、 ANSI-Cでもコンパイル可能ですが、実行結果が異なります。 実行結果を同じにするには、 ANSI-Cの構造体初期化時『{』を多めに付ける必要があります。 R2の初期化を参考にして下さい。 より、詳細な説明は プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「付録A8.7初期化」Page272 を参照して下さい。