Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een functieaanroep is een expressie die besturingselementen en argumenten (indien van toepassing) doorgeeft aan een functie en het formulier heeft:
expressie (opt voorexpressielijst)
waarbij expressie een functienaam is of resulteert in een functieadres en expressielijst een lijst met expressies (gescheiden door komma's). De waarden van deze laatste expressies zijn de argumenten die worden doorgegeven aan de functie. Als de functie geen waarde retourneert, declareert u deze als een functie die als resultaat geeft void.
Als er een declaratie bestaat vóór de functieaanroep, maar er geen informatie over de parameters wordt gegeven, ondergaan eventuele niet-declaratieargumenten gewoon de gebruikelijke rekenkundige conversies.
Opmerking
De expressies in de lijst met functieargumenten kunnen in elke volgorde worden geëvalueerd, zodat argumenten waarvan de waarden kunnen worden gewijzigd door neveneffecten van een ander argument niet-gedefinieerde waarden hebben. Het reekspunt dat is gedefinieerd door de operator functieaanroep garandeert alleen dat alle bijwerkingen in de lijst met argumenten worden geëvalueerd voordat het besturingselement doorgaat naar de aangeroepen functie. (Houd er rekening mee dat de volgorde waarin argumenten op de stapel worden gepusht, een afzonderlijke kwestie is.) Zie Reekspunten voor meer informatie.
De enige vereiste in een functieoproep is dat de expressie vóór het haakje moet evalueren naar een functieadres. Dit betekent dat een functie kan worden aangeroepen via een functie-aanwijzerexpressie.
Voorbeeld
In dit voorbeeld ziet u functie-aanroepen die worden aangeroepen vanuit een switch instructie:
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 );
}
In dit voorbeeld, de functie-aanroep in main,
work( count, lift );
geeft een variabele countvoor een geheel getal en het adres van de functie lift door aan de functie work. Houd er rekening mee dat het functieadres wordt doorgegeven door de functie-id te geven, omdat een functie-id resulteert in een aanwijzerexpressie. Als u op deze manier een functie-id wilt gebruiken, moet de functie worden gedeclareerd of gedefinieerd voordat de id wordt gebruikt; anders wordt de id niet herkend. In dit geval wordt aan het begin van de main functie een prototype gegevenwork.
De parameter function in work wordt gedeclareerd als een aanwijzer naar een functie die één int argument gebruikt en een long waarde retourneert. De haakjes rond de parameternaam zijn vereist; zonder deze waarden zou de declaratie een functie opgeven die een aanwijzer naar een long waarde retourneert.
De functie work roept de geselecteerde functie vanuit de for lus aan met behulp van de volgende functie-aanroep:
( *function )( i );
Eén argument, iwordt doorgegeven aan de aangeroepen functie.