va_arg
|
Défini dans l'en-tête
<stdarg.h>
|
||
|
T va_arg
(
va_list ap, T
)
;
|
||
La macro
va_arg
s'étend en une expression de type
T
qui correspond au paramètre suivant du
va_list
ap
.
Avant d'appeler
va_arg
,
ap
doit être initialisé par un appel à
va_start
ou
va_copy
, sans appel intermédiaire à
va_end
. Chaque invocation de la macro
va_arg
modifie
ap
pour pointer vers le prochain argument variable.
Si le type du prochain argument dans ap (après promotions) n'est pas compatible avec T , le comportement est indéfini, sauf si :
- un type est un type entier signé, l'autre type est le type entier non signé correspondant, et la valeur est représentable dans les deux types ; ou
- un type est un pointeur vers void et l'autre est un pointeur vers un type caractère.
Si
va_arg
est appelé lorsqu'il n'y a plus d'arguments dans
ap
, le comportement est indéfini.
Table des matières |
Paramètres
| ap | - | une instance du type va_list |
| T | - | le type du paramètre suivant dans ap |
Valeur développée
le prochain paramètre variable dans ap
Exemple
#include <math.h> #include <stdarg.h> #include <stdio.h> double stddev(int count, ...) { double sum = 0; double sum_sq = 0; va_list args; va_start(args, count); for (int i = 0; i < count; ++i) { double num = va_arg(args, double); sum += num; sum_sq += num*num; } va_end(args); return sqrt(sum_sq / count - (sum / count) * (sum / count)); } int main(void) { printf("%f\n", stddev(4, 25.0, 27.3, 26.9, 25.7)); }
Sortie :
0.920258
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.16.2.2 La macro va_arg (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.16.1.1 La macro va_arg (p: TBD)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 7.16.1.1 La macro va_arg (p: 269-270)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.15.1.1 La macro va_arg (p : 249-250)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.8.1.2 La macro va_arg
Voir aussi
|
(C99)
|
effectue une copie des arguments de fonction variadiques
(macro de fonction) |
|
termine le parcours des arguments de fonction variadiques
(macro de fonction) |
|
|
contient les informations nécessaires pour
va_start
,
va_arg
,
va_end
, et
va_copy
(typedef) |
|
|
permet l'accès aux arguments de fonction variadiques
(macro de fonction) |
|
|
Documentation C++
pour
va_arg
|
|