構造体、共用体、および列挙型の互換性 (C のみ)
単一のソース・ファイル内で、構造体または共用体の定義ごとに、他のすべての構造体および共用体型と異なり、かつ互換性がない新規の型が作成されます。
ただし、すでに定義された構造体型または共用体型への参照である型指定子は同じ型です。タグが、参照と定義を関連付け、型名として
効果的に機能します。これを図示すると、この例では構造体の型名 j と k だけが互換性をもっています。
struct { int a; int b; } h;
struct { int a; int b; } i;
struct S { int a; int b; } j;
struct S k;
互換性のある構造体は、互いに割り当てることができます。同一メンバーがあるが別のタグが付けられている構造体または共用体には、互換性はなく、互いに割り当てることは できません。同一メンバーであっても、異なる位置合わせを使用する構造体と共用体には互換性がなく、互いに割り当てることはできません。
コンパイラーが列挙型の変数および定数を整数型として扱うため、 型互換性に関係なく、異なる列挙型の値を自由に混用できます。 列挙型と、それを 表す整数型の間の互換性は、コンパイラー・オプションと関連プラグマで 制御されます。 ENUM コンパイラー・オプションおよび関連プラグマの詳細については、「ILE C/C++ コンパイラー参照」の ENUM および #pragma enum を参照してください。