Il est possible de déclarer une fonction comme ayant un nombre variable
de paramètres en « déclarant » les paramètres optionnels par
l'unité lexicale ... (3 points à la suite).
Une fonction peut avoir à la fois des paramètres obligatoires et des
paramètres optionnels, les paramètres obligatoires apparaissant en premier
et l'unité lexicale ... apparaissant en dernière position
dans la liste de déclaration des paramètres formels.
Dans le corps de la fonction on ne dispose pas de nom pour désigner les
paramètres.
L'accès à ceux-ci ne peut se faire qu'en utilisant les macros suivantes
définies dans la bibliothèque standard :
- va_list
- permet de déclarer une variable opaque au programmeur,
à passer en paramètre aux autres macros.
Cette variable s'appelle traditionnellement ap (pour argument
pointer), et a pour but de repérer le paramètre effectif courant.
- va_start
- doit être appelée avant toute utilisation de
va_arg.
La macro va_start a deux paramètres : la variable ap et le nom
du dernier paramètre obligatoire de la fonction.
- va_arg
- délivre le paramètre effectif courant : le premier
appel à va_arg délivre le premier paramètre, puis chaque nouvel appel
à va_arg délivre le paramètre suivant.
La macro va_arg admet deux paramètres : la variable ap et le type
du paramètre courant.
- va_end
- doit être appelée après toutes les utilisations de
va_arg.
La macro va_end admet un seul paramètre : la variable ap.
Rien n'est prévu pour communiquer à la fonction le nombre et le type des
paramètres effectivement passés : c'est un problème à la charge du programmeur.
Sous-sections
Matthieu Moy
2017-02-08