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