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