va_start
| Défini dans l'en-tête <stdarg.h>
|
||
void va_start( va_list ap, parmN );
|
(jusqu'à C23) | |
void va_start( va_list ap, ... );
|
(depuis C23) | |
La macro va_start permet d'accéder aux arguments variablessuivant l'argument nommé parmN(jusqu'à C23).
va_start doit être invoquée avec une instance d'un objet va_list valide ap avant tout appel à va_arg.
|
Si |
(jusqu'à C23) |
|
Si plus d'un argument est présent pour |
(depuis C23) |
Paramètres
| ap | - | une instance du type va_list |
| parmN | - | le paramètre nommé précédant le premier paramètre variable |
Valeur développée
(aucune)
Exemple
#include <stdarg.h>
#include <stdio.h>
int add_nums_C99(int count, ...)
{
int result = 0;
va_list args;
va_start(args, count); // count can be omitted since C23
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
#if __STDC_VERSION__ > 201710L
// Same as above, valid since C23
int add_nums_C23(...)
{
int result = 0;
va_list args;
va_start(args);
int count = va_arg(args, int);
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
#endif
int main(void)
{
printf("%d\n", add_nums_C99(4, 25, 25, 50, 50));
#if __STDC_VERSION__ > 201710L
printf("%d\n", add_nums_C23(4, 25, 25, 50, 50));
#endif
}
Sortie possible :
150
150
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.16.1.4 La macro va_start (p : 290-292)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.16.1.4 La macro va_start (p : 198-199)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.16.1.4 La macro va_start (p : 271-272)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.15.1.4 La macro va_start (p : 251-252)
- Norme C89/C90 (ISO/IEC 9899:1990) :
- 4.8.1.1 La macro va_start
Voir aussi
| accède au prochain argument de fonction variadique (macro de fonction) | |
(C99) |
fait une copie des arguments de fonction variadique (macro de fonction) |
| termine le parcours des arguments de fonction variadique (macro de fonction) | |
| contient les informations nécessaires à va_start, va_arg, va_end, et va_copy (typedef) | |
Documentation C++ pour va_start
| |