Appels de fonction
Un appel de fonction est une expression qui s'exécute contrôle et arguments (le cas échéant) à une fonction et a la forme :
expression (expression-listeopt)
où expression est un nom de fonction ou correspond à une adresse de fonction et à expression-liste est une liste d'expressions (séparées par des virgules).les valeurs de ces dernières expressions sont les arguments passés à la fonction.Si la fonction ne retourne pas de valeur, vous la déclarez comme étant une fonction qui retourne void.
Si une déclaration existe avant l'appel de fonction, mais aucune information n'est affiché concernant les paramètres, tous les arguments non déclarés subissent simplement les conversions arithmétiques classiques.
[!REMARQUE]
Les expressions dans la liste d'arguments de fonction peuvent être évaluées dans n'importe quel ordre, les arguments dont les valeurs peuvent être modifiées par des effets secondaires d'un autre argument ont des valeurs non définies.Le point de séquence défini par l'opérateur d'appel de fonction garantit uniquement que tous les effets secondaires dans la liste d'arguments sont évaluées avant d'un contrôle s'exécute à la fonction appelée.(Notez que l'ordre dans lequel les arguments sont enfoncés sur la pile est une question distincte.) Consultez points de séquence pour plus d'informations.
La seule condition d'un appel de fonction est que l'expression avant les parenthèses doit prendre une adresse de la fonction.Cela signifie qu'une fonction peut être appelée via une expression de pointeur fonction.
Exemple
Cet exemple illustre des appels de fonction appelés d'une instruction d' 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 );
}
dans cet exemple, l'appel de fonction dans main,
work( count, lift );
passe une variable entière, count, et l'adresse de la fonction lift à la fonction work.Notez que l'adresse de fonction est passée simplement en donnant l'identificateur de fonction, comme un identificateur de fonction correspond à une expression de pointeur.Pour utiliser un identificateur de fonction de cette façon, la fonction doit être déclaré ou défini avant que l'identificateur soit utilisé ; sinon, l'identificateur n'est pas reconnu.Dans ce cas, un prototype pour work est fourni au début de la fonction d' main .
Le paramètre function dans work est déclaré pour être un pointeur vers une fonction qui prend un argument d' int et de retourner une valeur de long .Les parenthèses autour de le nom de paramètre sont requises ; sans elles, la déclaration assigne une fonction qui retourne un pointeur vers une valeur de long .
La fonction work appelle la fonction sélectionnée à l'intérieur de la boucle de pour à l'aide d'un appel de fonction suivant :
( *function )( i );
un argument, i, est passé à la fonction appelée.