#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).