関数呼び出し
関数は 関数にコントロールおよび引数 (存在する場合)およびフォームを含む式です :
式 ( 式のリスト opt)
式 が関数名や関数のアドレスと 式のリスト に評価しますが式のリスト (コンマで区切って)。この二つの式の値には関数に渡された引数です。関数が値を返さない場合その関数である場合はを返します void 宣言します。
宣言と関数呼び出しの前にある場合は情報のパラメーターに対して指定されていない場合は定義されていない引数は通常の算術変換を加えられています。
[!メモ]
関数の引数リストの式は任意の順序は値が他の引数の副作用によって未定義にする値を変更できる引数は評価できます。引数リストのすべての副作用が前に呼び出し先の関数に制御が渡されます評価することだけ関数呼び出し演算子の保証によって定義されるシーケンス ポイント。引数をスタックにプッシュされる順序が別の関係であることに注意してください)。詳細についてはシーケンス ポイント を参照してください。
すべての関数呼び出しの唯一の要件はかっこの前の式が関数アドレスに評価する必要があります。これは関数が関数ポインター式から呼び出すことができることを意味します。
例
この例では switch のステートメントから呼び出された関数呼び出しを示しています :
int main()
{
/* Function prototypes */
long lift( int ), step( int ), drop( int );
void work( int number, long (*function)(int i) );
int select, count;
.
.
.
select = 1;
switch( select )
{
case 1: work( count, lift );
break;
case 2: work( count, step );
break;
case 3: work( count, drop );
/* Fall through to next case */
default:
break;
}
}
/* Function definition */
void work( int number, long (*function)(int i) )
{
int i;
long j;
for ( i = j = 0; i < number; i++ )
j += ( *function )( i );
}
この例では関数呼び出しmain
work( count, lift );
関数 lift に関数 work の整数変数および count アドレスを渡します。関数識別子がポインター式を評価するため関数アドレスが関数の識別子を提供を単純に渡されることに注意してください。関数識別子をこのように使用するには識別子を使用する前に宣言または定義する必要があります。; は識別子は認識されません。この場合work のプロトタイプは main の関数の先頭で指定します。
work のパラメーター function は int の 1 個の引数を受け取りlong の値を返す関数へのポインターとして宣言されます。パラメーター名を囲むかっこが必要です ; これらなしでは宣言が long の値へのポインターを返す関数を指定します。
関数 work は For のループ内から次の関数呼び出しを使用して選択した関数を呼び出します :
( *function )( i );
1 番目の引数はi 呼び出された関数に渡されます。