GERBELOTBARILLON.COM

Parce qu'il faut toujours un commencement...

Les fonctions à arguments variables

Les fonctions à arguments variables


Le comportement général avec les fonctions est de les utiliser avec un nombre défini de paramètres. Ceux-ci correspondent à la signature de la fonction. Par exemple int func(int x, char c);. Mais qu'en est-il si nous souhaitons transmettre un nombre variable d'arguments ? Cela pourrait nous servir par exemple pour une fonction d'addition avec un nombre d'éléments variable, solution plus élégante que de créer un tableau et de le transmettre à la fonction. L'appel pourrait s'effectuer par int resultat = somme(5, 1, 2, 3, 4, 5); ou bien par int result = somme(2, 1, 2);. Le prototype d'une fonction avec arguments variables est le suivant : [type de retour] func(int counter, ...) {}counter est un entier référençant le nombre de valeurs qu'il y aura à traiter et l'ellipse notée ... contiendra les valeurs.

Pour réaliser cela nous allons utiliser les macros va_list de l'include stdarg.h va_arg(aVaList, parameterType)Permet l'extraction du prochain paramètre passé à la macro. va_copy(vaListSrc, vaListDest)Permet la copie de la liste d'arguments. La liste initialisée par copie devra être libérée par un appel à va_end(). va_end(aVaList)Permet la libération des ressources acquises pour le parcourt de la liste d'arguments. va_start(aVaList, aParameter)Initialise d'une structure va_list à partir d'un paramètre de la liste. Si le paramètre aParameter est une chaine de caractères, celle-ci sera parcourue caractère par caractères, symbolisant alors le nombre de paramètres. Par exemple la chaine "Hello %s" passée en paramètre représentera un nombre de 8 caractères. A l'utilisateur de cette macro de vérifier caractère par caractère cette chaine afin de déceler une valeur de format comme '%s' ici.

2021 © LGB