Wywołania funkcji
A Wywołanie funkcji jest wyrażenie, które przekazuje kontrolę i argumenty (jeśli ma zastosowanie) do funkcji i ma postać:
wyrażenie (Lista wyrażeńopt)
gdy wyrażenie jest nazwą funkcji lub wynikiem adres funkcji i Lista wyrażeń jest lista wyrażeń (oddzielone przecinkami).Wartości te ostatnie wyrażeń są argumentów przekazanych do funkcji.Jeśli funkcja nie zwraca wartość, a następnie oświadczają, jest funkcja, która zwraca on void.
Jeśli deklaracja istnieje przed wywołaniem funkcji, ale podano żadnych informacji dotyczących parametrów, żadnych argumentów nielegalnej po prostu poddawane są zwykłymi konwersje arytmetycznych.
[!UWAGA]
Wyrażenia na liście argumentów funkcji może zostać oceniony w dowolnej kolejności, więc niezdefiniowane wartości argumentów, których wartości mogą być zmieniane efektów ubocznych z innym argumentem.Punkt sekwencji zdefiniowane przez wywołanie funkcji operatora tylko gwarantuje, że wszystkie efekty uboczne, na liście argumentów są sprawdzane przed kontroli przekazuje do wywołanej funkcji.(Należy zauważyć, że kolejność Admi argumenty na stosie jest oddzielne sprawy). Zobacz Punkty sekwencji Aby uzyskać więcej informacji.
Jedynym wymaganiem w każde wywołanie funkcji jest, że wyrażenie przed nawiasami musi dawać w wyniku adres funkcji.Oznacza to, że funkcja może być wywoływana za pośrednictwem dowolnego wyrażenia wskaźnika funkcji.
Przykład
Ten przykład ilustruje wywołania funkcji o nazwie od switch instrukcji:
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 );
}
W tym przykładzie funkcja wywołanie main,
work( count, lift );
przekazuje zmienną integer countoraz adres funkcji lift do funkcji work.Należy zauważyć, że adres funkcji przekazywany jest po prostu przez zawierający identyfikator funkcji, ponieważ identyfikator funkcji, które są wynikiem wyrażenia wskaźnik.Aby użyć identyfikatora funkcji w ten sposób, funkcja muszą być zadeklarowane lub zdefiniowane przed identyfikator jest używany; w przeciwnym razie identyfikator nie jest rozpoznawany.W tym przypadku prototyp work znajduje się na początku main funkcji.
Parametr function w work został zadeklarowany jako wskaźnik do funkcji, których jedna int argument i zwracanie long wartości.Nawiasy wokół nazwy parametrów są wymagane; bez nich, deklaracja określić zwracanie wskaźnik do funkcji long wartości.
Funkcja work wywołuje funkcję wybranych z wewnątrz dla pętli przy użyciu następujących wywołanie funkcji:
( *function )( i );
Jeden argument, i, jest przekazywany do wywołanej funkcji.