#include <stdarg.h> // <cstdarg> en C++
void va_start( va_list ap, ... ); // C23
Cette macro initialise une variable de type va_list. Elle doit être appelée avant
le premier accès aux arguments non nommés avec va_arg.
Jusqu'à C17, l'appel usuel est va_start( arguments, lastNamedParameter ), où le second argument est le dernier
paramètre nommé avant .... Depuis C23, la forme va_start( arguments ) est disponible. Les arguments
supplémentaires restent acceptés par compatibilité avec les anciens codes.
va_list à initialiser.L'exemple suivant montre l'utilisation compatible C89/C99/C11/C17 : le premier argument indique combien d'entiers doivent être lus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <stdarg.h> #include <stdio.h> #include <stdlib.h> int maximum( int counter, ... ) { va_list arguments; va_start( arguments, counter ); int max = va_arg( arguments, int ); for ( int index = 1; index < counter; index++ ) { int value = va_arg( arguments, int ); if ( value > max ) { max = value; } } va_end( arguments ); return max; } int main() { printf( "%d\n", maximum( 4, 2, 11, 5, 8 ) ); return EXIT_SUCCESS; } |
Cet exemple produit l'affichage suivant.
11
Depuis C23, il est possible d'écrire une fonction dont la liste de paramètres ne contient que .... Dans ce cas,
les informations de cadrage, comme le nombre d'arguments ou une sentinelle de fin, doivent elles aussi être passées dans la
partie variable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <stdarg.h> #include <stdio.h> #include <stdlib.h> int addition( ... ) { va_list arguments; va_start( arguments ); int counter = va_arg( arguments, int ); int sum = 0; for ( int index = 0; index < counter; index++ ) { sum += va_arg( arguments, int ); } va_end( arguments ); return sum; } int main() { printf( "%d\n", addition( 3, 10, 20, 30 ) ); return EXIT_SUCCESS; } |
Cet exemple utilise une syntaxe C23. Il produit l'affichage suivant.
60
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :