Re: 構造体のメンバの記憶域の順
片山@PFUです。
ohta@src.ricoh.co.jp (Junn Ohta) writes:
> K&R Cのころから、つまり規格なんて存在しなくて「処
> 理系が言語を規定」していたころから
一応、Reference Manual はありましたが、実態に追い付いていなかっ
たですね。
> そういうプログラ
> ムが広く使われていて、そういうプログラムも破綻しな
> いように規格が決められたのではないか、というのが当
> 方のいいたかったことです。
K&R C では、「先頭部分のメンバーの並び方が同じ構造体は、その部分
が互換である」ことを保証していました。例えば、
struct A { int a; int *p; int i; };
struct B { int a; int *p; double d; };
の場合、a と p は struct A と struct B で同じオフセットを持つこ
とが保証されていました。Unix 7th Edition までは、構造体メンバの
名前空間は、今のように各構造体毎ではなく、構造体メンバ全体で一つ
の空間となっていました。このため、この規定がないと、a や p が多
重定義でエラーになります。
これはパディングに関する規定ですが、メンバーの並び順の規定が前提
となっています。
--
片山@PFU
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