Namensräume
Varianten
Aktionen

va_start

Von cppreference.com
< cpp‎ | utility‎ | variadic
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert im Header <cstdarg>
void va_start( std::va_list ap, parm_n );

Das Makro va_start ermöglicht den Zugriff auf die benannten Argumente, die dem benannten Argument parm_n folgen.

va_start sollte vor jedem Aufruf von va_arg mit einer Instanz eines gültigen va_list-Objekts ap aufgerufen werden.

Wenn parm_n eine Pack-Erweiterung oder eine Entität ist, die aus einer Lambda-Erfassung resultiert, ist das Programm schlecht geformt, keine Diagnose erforderlich.

(seit C++11)

Wenn parm_n vom Referenztyp ist oder von einem Typ, der nicht mit dem Typ kompatibel ist, der aus Standardargument-Promotions resultiert, ist das Verhalten undefiniert.

Inhalt

[edit] Parameter

ap - ein Objekt vom Typ va_list
parm_n - der benannte Parameter, der dem ersten variablen Parameter vorangeht

[edit] Erweiterter Wert

(keine)

[edit] Hinweise

va_start muss parm_n mit überladenem operator& unterstützen.

[edit] Beispiel

#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';
}

Ausgabe

150

[edit] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
CWG 273 C++98 war unklar, ob va_start erforderlich ist, um
parm_ns mit überladenem operator& zu unterstützen
Gefordert
LWG 2099 C++98 war das Verhalten undefiniert, wenn parm_n
mit einer Funktions-, Array- oder Referenztyp deklariert ist
das Verhalten ist undefiniert, wenn
parm_n vom Referenztyp ist

[edit] Siehe auch

greift auf das nächste variadische Funktionsargument zu
(Funktionsmakro) [bearbeiten]
beendet die Durchquerung der variadischen Funktionsargumente
(Funktionsmakro) [bearbeiten]
C-Dokumentation für va_start