Re: 構造体のメンバの記憶域の順
In article <87bruguaue.wl@anago2.mas.chi.its.hiroshima-cu.ac.jp> fujii@chi.its.hiroshima-cu.ac.jp writes:
>> > 構造体のメンバの記憶域は並べられた順に割り当てらることとなっていますが、
>> > これには何か理由がありますか。
>> それが規格だから。としか答えようありません。
>なぜ規格をそうしたのかがちょっと不思議に感じるのです。
(中略)
>char や int のサイズと詰め物のしかたについてが処理系依存なのに、
>並びだけ決めても移植性を考えると使えないと思う。
だからって、並び順をメチャクチャにしたら、益々使えませんよね。
とりあえず並び順だけでも保証されていたら、
プリプロセッサを駆使して、
複数の処理系で構造体の実質的構造が同一になるように書くこともできます。
それに、同一プログラムを複数の処理系で共有するのが唯一の方法ではありません。
他の処理系が吐き出したファイルを、
処理系の差異を意識したプログラミングによって、
正しく読み出せるようにするなんていう解決方法もある。
#ファイルを読んだ後、整数データ部分の上位バイトと下位バイトを交換して……
#なんて、頻繁に使う処理なんだけどな^_^;
何れにしても、データの順序をプログラマが自由に制御できてこそ、
思い通りにデータが扱えるわけで、
それをコンパイラが好き勝手に変えてしまったら、
できるハズのこともできなくなります。
戸田 孝@滋賀県立琵琶湖博物館
toda@lbm.go.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735