Namespaces
Variants

va_start

From cppreference.net
Utilities library
Défini dans l'en-tête <cstdarg>
void va_start ( std :: va_list ap, parm_n ) ;

La macro va_start permet d'accéder aux arguments variables suivant l'argument nommé parm_n .

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

Si le parm_n est une expansion 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 de type référence, ou d'un type non compatible avec le type résultant des promotions d'arguments par défaut , le comportement est indéfini.

Table des matières

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