関数呼び出しと引数の変換

提供: RAD Studio
移動先: 案内検索

関数:インデックス への移動

関数は,仮パラメータと一致する順序に並べられた実引数をともなって呼び出されます。実引数は,初期化による変換と同じように宣言された仮パラメータのデータ型に変換されます。

次に,コンパイラがプロトタイプがある場合とない場合の両方において,関数呼び出しの際に言語修飾子と仮パラメータをどのように扱うかに関する規則の要約を示します。

  • 関数定義の言語修飾子は,その関数のすべての呼び出しにおいて,関数宣言で使用されている修飾子に一致しなければならない
  • 関数の中では,その関数の仮パラメータ値を変更することが許されているが,C++ における参照引数を除けば,これが呼び出しルーチン側の実引数に影響することはない

関数プロトタイプが前もって宣言されていない場合には,標準の変換で解説している整数の拡張規則に従って,コンパイラ は整数引数を変換してから関数呼び出しに渡します。関数プロトタイプが宣言されている場合には,コンパイラは,与えられた引数を宣言されたパラメータのデータ型に,代入の際と同じように変換します。

関数プロトタイプに省略記号(...)が含まれる場合,プロトタイプに与えられた固定引数をほかのプロトタイプと同じように変換します。固定パラメータより後ろのパラメータは,プロトタイプがない場合の関数引数の通常の規則に従って拡張します。

プロトタイプが存在する場合は,(そのプロトタイプに省略記号がなければ)引数の個数はパラメータの数と一致しなければなりません。型は,代入において変換できる範囲に互換でなければなりません。どんな場合でも,明示的なキャストを用いて,引数を関数プロトタイプで受け入れられる型に変換することができます。

メモ:  関数プロトタイプが実際の関数定義に一致しない場合,その関数定義がプロトタイプと同一のコンパイル単位(同一ファイル)である場合に限り,コンパイラはこの不一致を検出します。対応するプロトタイプのヘッダーファイルでさまざまなルーチンのライブラリを作成するときには,ライブラリをコンパイルするときにヘッダーファイルをインクルードして,プロトタイプと実際の関数定義との間の矛盾を捉えられるようにしてください。C++ は型保障リンク機能を提供しており,想定されるパラメータと実際のパラメータの型の違いは,リンカによって捉えられます。