Re: Fonction en C

Top Page

Reply to this message
Author: Bernard Cassagne
Date:  
To: guilde
Subject: Re: Fonction en C
Dans votre courrier du Nov 20, 13:43, vous ecrivez:
    Quelqu'un sait-il comment on peut recuperer les parametres d'une fonction
    en C declaree comme suit :

    
         void pipo(int, int, ...)

    
    Ce que j'essaye de faire, c'est comme 'printf', a savoir passer des
    arguments obligatoires (les deux premiers int), et des arguments
    optionnels, qui peuvent etre de n'importe quel type (le deux int me
    permettraient de dire a quoi j'aurais a faire).
Voici un petit exemple d'utilisation d'une fonction a nombre variable de 
parametres :



#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()
{
printf("resu = %d\n",addn(3,10,11,12));   /*   imprime 33                     */
}


-- 
-------------------------------------------------------------------------------
Bernard Cassagne                         Laboratoire CLIPS - IMAG
Domaine Universitaire       BP 53         38041 Grenoble CEDEX 9         FRANCE
tel: 04.76.51.46.14     fax: 04.76.44.66.75     e-mail:Bernard.Cassagne@???