[2332] Re:誤植 ポインタ完全制覇 P363
投稿者:(ぱ)こと管理人
2023/05/22 19:53:48
お待たせしました。
>「C言語 ポインタ完全制覇」P363 List 6-4 designated_initializer.c の 20 行目は以下ではないでしょうか。
> 誤 Hoge hoge = {.b = 3, .c = 5, {[3] = 10, 11, 12}};
> 正 Hoge hoge = {.b = 3, .c = 5, .array = {[3] = 10, 11, 12}};
これですが、規格書(JIS X3010:2003)の「6.7.8 初期化」に以下の記載があります。
>指示がない場合,現オブジェクト中の部分オブジェクトを,現オブジェクトの型に従う順序で
>初期化する。すなわち,配列要素は添字の昇順で初期化し,構造体メンバは宣言の順で初期化し,
>共用体では最初の名前付きメンバを初期化する(127)。
>一方,指示が存在する場合,それに続く初期化子を使って要素指示子が示す部分オブジェクトを
>初期化する。そして要素指示子で示される部分オブジェクトの次の部分オブジェクトから
>順に初期化を続ける(128)。
「要素指示子で示される部分オブジェクトの次の部分オブジェクトから順に初期化を続ける」
とあるので、書き方としては正当だと思います。gccに-std=c99 -pedanticオプションを付けて
警告もなく実行できました。
ただ、説明不足なのは否めませんので、補足を上げようと思います。
ご指摘ありがとうございました。