Malheureusement, il n'est pas possible de créer une fonction telle que tu la décris. En effet, il n'est pas possible de connaître le nombre d'arguments pour une telle fonction. Tu vas devoir passer le nombre d'arguments en premier argument de la fonction par exemple, ou utiliser une valeur spéciale pour le dernier argument.
Par exemple, supposons que tu gères la fin de liste d'arguments par la valeur spéciale INT_MAX :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| int addition( int premier, ... )
{
va_list liste;
va_start( liste, premier );
int parametre = premier;
int solution = 0;
do
{
solution += parametre;
parametre = va_arg( liste, int );
} while( parametre != INT_MAX );
va_end( liste );
return solution;
}
int main()
{
printf( "addition : %d\n", addition( 1, 0, 4, INT_MAX ) );
exit( 0 );
} |
Mais je trouve ça particulièrement laid. De même être obligé de transmettre le nombre d'arguments en premier argument...
Une autre solution plus élégante serait de définir une fonction avec deux arguments :
int addition( int x, int y ) { return x + y; }
Et pour l'utiliser sur plusieurs arguments de façon détournée, ce serait :
int resultat = addition( x, addition( y, addition( z, w ) ) );
Pour ma part, j'évite autant que possible les fonctions avec nombre d'arguments variables.
Partager