Fonction à nombre variable de paramètres

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