© Éditions Eyrolles
117
chapitre n° 6
La programmation modulaire et les fonctions
Vous constatez la présence, dans l’en-tête, des deux noms des paramètres fixes par1 et par2,
déclarés de manière classique ; les trois points servent à spécifier au compilateur l’existence
de paramètres en nombre variable.
La déclaration :
va_list adpar
précise que adpar est un identificateur de liste variable. C’est lui qui nous servira à récupérer,
les uns après les autres, les différents arguments variables.
Comme à l’accoutumée, une telle déclaration n’attribue aucune valeur à adpar. C’est effectivement la fonction va_start qui va permettre de l’initialiser à l’adresse du paramètre variable.
Notez bien que cette dernière est déterminée par va_start à partir de la connaissance du
nom du dernier paramètre fixe.
Le rôle de la fonction va_arg est double :
●
d’une part, elle fournit comme résultat la valeur trouvée à l’adresse courante fournie par
adpar (son premier argument), suivant le type indiqué par son second argument (ici int).
●
d’autre part, elle incrémente l’adresse contenue dans adpar, de manière que celle-ci
pointe alors sur l’argument variable suivant.
Ici, une instruction while nous permet de récupérer les différents arguments variables, sachant
que le dernier a pour valeur -1.
main()
{
printf ("premier essai\n") ;
essai (125, 'a', 15, 30, 40, -1) ;
printf ("\ndeuxième essai\n") ;
essai (6264, 'S', -1) ;
}
premier essai
premier paramètre : 125
second paramètre : a
argument variable : 15
argument variable : 30
argument variable : 40
deuxième essai
premier paramètre : 6264
second paramètre : S
Arguments en nombre variable délimités par une sentinelle (suite)
Delannoy Livre.book Page 117 Mercredi, 6. mai 2009 4:26 16
Précédent

- 130/281

Suivant