Exemple 1

Ci-dessous l'exemple de la fonction addn qui réalise la somme de ses paramètres optionnels.
#include <stdio.h>
#include <stdarg.h>
/*****************************************************************************/
/*                                                                           */
/*                              addn                                         */
/*                                                                           */
/*   But:                                                                    */
/*      réalise l'addition d'un nombre variable de paramètres                */
/*                                                                           */
/*****************************************************************************/
int addn(int nbopd, ...)         /*   nbopd = nombre d'opérandes du add      */
{
int i, s = 0;
va_list(ap);                     /*   déclaration de ap                      */

va_start(ap,nbopd);              /*   initialisation de ap                   */
for( i = 1; i <= nbopd; i++)
   s = s + va_arg(ap,int);       /*   va_arg() donne le paramètre courant    */
va_end(ap);                      /*   on a fini                              */
return(s);
}

/*****************************************************************************/
/*                              main                                         */
/*****************************************************************************/
int main(void)
{
printf("resu = %d\n",addn(3,10,11,12));   /*   imprime 33                    */
return 0;
}
Dans cet exemple, le problème du nombre de paramètres effectifs a été réglé par un paramètre obligatoire de la fonction : nbopd. En ce qui concerne le type des paramètres effectifs, ils sont tous supposés être entiers, d'où le va_arg(ap,int).



Matthieu Moy 2012-06-20