関数が互換性を持つためには、次の規則に従います:
2 つの関数型が互換性を持つためには、その戻り型が互換性を持たなければいけません。関数型のいずれかまたはその両方がプロトタイプを持つ場合:規則はより複雑になります。
プロトタイプを持つ 2 つの関数型が互換性を持つためには、(省略記号 (…) も含む) パラメータの数が同じで、対応するパラメータもパラメータ互換でなければいけません。
古い形式の関数定義がプロトタイプを持つ関数型と互換性を持つためには、プロトタイプの最後のパラメータが省略記号 (…) であってはいけません。プロトタイプの各パラメータは、デフォルトの引数拡張の適用後、対応する古い形式のパラメータとパラメータ互換でなければいけません。
古い形式の関数宣言 (定義ではない) が、プロトタイプを持つ関数型と互換性を持つためには、プロトタイプの最後のパラメータが省略記号 (…) であってはいけません。プロトタイプのすべてのパラメータは、デフォルトの引数拡張で影響を受けない型でなければいけません。
2 つの型がパラメータ互換になるためには、これら 2 つの型は、1 番上に修飾子があればそれが削除されたあと、そして、関数型または配列型が適切なポインタ型に変換されたあとに、互換性を持たなければいけません。