互換型

C 互換型の概念は、変更することなく 2 つの型を一緒に使用できるという考え方 (代入式 のように)、変更することなく一方から他方へ置換できるという考え方、および それらを複合型へ結び付けるという考え方を結合したものです。複合型 は、2 つの互換型を結合した結果生まれるものです。合成された 2 つの互換型から生まれ た結果の複合型を判別する方法は、整数型が 算術演算と結合するときに使われる整数型の通常のバイナリー変換と似ています。

明らかに、同一の 2 つの型は互換性があり、それらの複合型は同じ型です。同一でない型 、関数プロトタイプ、および型修飾型の型互換性を決定する法則は、あまり明らかではありません。 typedef 定義での名前は単なる型の同義語で、そのため typedef の名前が同じもの、ゆえに互換タイプを示す可能性があります。特定のプロパティーを持つ ポインター、関数、および配列もまた、互換タイプである可能性があります。

同一型

算術型の場合には、さまざまな結合の型指定子があることによって、異なる型が表示されたり 、表示されなかったりします。例えば、型 signed int は、それが ビット・フィールドの型として使用される場合を除き int と同じ型ですが、charsigned char、および unsigned char は異なる型です。

型修飾子があることによって、型が変更します。つまり、const intint と同じ型でないため、この 2 つの型には互換性がありません。

2 つの算術型は、それらが同じ型である場合に限って互換性があります。

別々にコンパイルされたソース・ファイル間の互換性

構造体、共用体、または列挙型の定義によって、新規の型が生まれます。2 つの構造体、共用体、または列挙型の定義が 別々のソース・ファイルに定義されると、理論上、各ファイルは同じ名前を持つ型のオブジェクトに異なる定義を含めることができます。2 つの宣言は互換性が ある必要があり、互換性がなければプログラムのランタイム振る舞いは定義されません。 したがって、互換性規則は、同じソース・ファイル内での互換性規則よりも制限が厳しくて 具体的です。別々にコンパイルされた ファイルで定義された構造体、共用体、および列挙型の場合、その複合型は現行ソース・ファイル内の型です。

別々のソース・ファイルで宣言された 2 つの構造体、共用体、または列挙型の間の互換性要件は、以下のとおりです。

列挙型の場合はまた、一致するメンバーが同じ値を持つ必要があります。

構造体および共用体の場合、型の互換性を保つために、以下の追加の要件を満たさなければ なりません。

特定の互換性規則については、『関連参照』を 参照してください。

C++ 同一型であることを型互換性の条件とする考え方とは異なる考え方は、C++ では存在し ません。一般的に、C++ における型の検査は C よりも厳しく、C で互換型のみを必須条件とするよ うな場合でも、 同一型が必須と見なされます。

関連参照

IBM Copyright 2003