Programmer en langage C
118
© Éditions Eyrolles
Enfin, la norme ANSI prévoit que la macro va_end doit être appelée avant de sortir de la
fonction concernée. Si vous manquez à cette règle, vous courrez le risque de voir un prochain
appel à la fonction conduire à un mauvais fonctionnement du programme.
Les arguments variables peuvent être de types différents, à condition toutefois que la fonction
soit en mesure de les connaître, d’une façon ou d’une autre.
Les macros va_start et va_end, ainsi que la description du type va_list, figurent dans le fichier
en-tête stdarg.h (d’où la directive #include correspondante). Cette description utilise une
méthode de définition de type (instruction typedef) qui ne sera exposée que dans le chapitre
relatif aux structures. Notez bien qu’ici vous n’avez pas besoin de savoir ce qui se cache derrière
va_list pour l’utiliser correctement.
12.2 Second exemple
La gestion de la fin de la liste des arguments variables est laissée au bon soin de l’utilisateur ; en
effet, il n’existe aucune fonction permettant de connaître le nombre effectif de ces arguments.
Cette gestion peut se faire :
●
par sentinelle, comme dans notre précédent exemple,
●
par transmission, en argument fixe, du nombre d’arguments variables.
Voici un exemple de fonction utilisant cette seconde technique. Nous n’y avons pas prévu
d’autres arguments fixes que celui spécifiant le nombre d’arguments variables.
Arguments variables dont le nombre est fourni en argument fixe
#include
#include
void essai (int nbpar, ...)
{ va_list adpar ;
int parv, i ;
printf ("nombre de valeurs : %d\n", nbpar) ;
va_start (adpar, nbpar) ;
for (i=1 ; i<=nbpar ; i++)
{ parv = va_arg (adpar, int) ;
printf ("argument variable : %d\n", parv) ;
}
}
Delannoy Livre.book Page 118 Mercredi, 6. mai 2009 4:26 16
Précédent

- 131/281

Suivant