片山@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