Namespaces
Variants

va_start

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (dépréciés en C++20)
 
 
Défini dans l'en-tête <cstdarg>
void va_start( std::va_list ap, parmN );
(jusqu'à C++26)
void va_start( std::va_list ap, ... );
(depuis C++26)

La macro va_start permet d'accéder aux arguments variablessuivant l'argument nommé parmN(jusqu'à C++26).

va_start doit être invoquée avec une instance d'un objet std::va_list valide ap avant tout appel à va_arg.

Si parm_n est une extension de paquet ou une entité résultant d'une capture lambda, le programme est mal formé, aucun diagnostic requis.

(depuis C++11)

Si parm_n est d'un type référence, ou d'un type incompatible avec le type résultant des promotions d'arguments par défaut, le comportement est indéfini.

(jusqu'à C++26)

Si plus d'un argument est présent pour va_start, les tokens de prétraitement comprenant le deuxième et les arguments suivants sont ignorés. Si l'un de ces arguments se développe pour inclure des parenthèses déséquilibrées, ou un token de prétraitement qui ne se convertit pas en un token, le programme est mal formé, aucun diagnostic requis.

(depuis C++26)

Paramètres

ap - un objet du type va_list
parm_n - le paramètre nommé précédant le premier paramètre variable

Valeur développée

(aucun)

Notes

va_start est requis pour prendre en charge parm_n avec l'opérateur operator& surchargé.

Exemple

#include <cstdarg>
#include <iostream>
int add_nums(int count...)
{
    int result = 0;
    std::va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i)
        result += va_arg(args, int);
    va_end(args);
    return result;
}
int main()
{
    std::cout << add_nums(4, 25, 25, 50, 50) << '\n';
}

Sortie :

150

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
CWG 273 C++98 il n'était pas clair si va_start devait
supporter les parm_n avec operator& surchargé
requis
LWG 2099 C++98 le comportement était indéfini si parm_n était
déclaré avec un type fonction, tableau ou référence
le comportement est indéfini si
parm_n est de type référence

Voir aussi

accède à l'argument suivant de la fonction variadique
(macro de fonction)
termine le parcours des arguments de la fonction variadique
(macro de fonction)
Documentation C pour va_start