Namespaces
Variants

va_start

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Koroutinenunterstü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 Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typ-Operationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert im Header <cstdarg>
void va_start( std::va_list ap, parmN );
(bis C++26)
void va_start( std::va_list ap, ... );
(seit C++26)

Das va_start-Makro ermöglicht den Zugriff auf die variadischen Argumentedie dem benannten Argument parmN(bis C++26) folgen.

va_start muss mit einer Instanz eines gültigen std::va_list-Objekts ap aufgerufen werden, bevor Aufrufe von va_arg erfolgen.

Wenn parm_n eine Paketerweiterung oder eine aus einem Lambda-Capture resultierende Entität ist, ist das Programm fehlerhaft, keine Diagnose erforderlich.

(seit C++11)

Wenn parm_n einen Referenztyp hat oder einen Typ, der nicht mit dem Typ kompatibel ist, der sich aus den Standard-Argumentförderungen ergibt, ist das Verhalten undefiniert.

(bis C++26)

Wenn mehr als ein Argument für va_start vorhanden ist, werden die Präprozessor-Token, aus denen das zweite und die folgenden Argumente bestehen, verworfen. Wenn eines dieser Argumente zu unausgeglichenen Klammern oder einem Präprozessor-Token expandiert, das nicht in ein Token konvertiert wird, ist das Programm fehlerhaft, keine Diagnose erforderlich.

(seit C++26)

Parameter

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

Erweiterter Wert

(keine)

Hinweise

va_start wird benötigt, um parm_n mit überladenem operator& zu unterstützen.

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

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
CWG 273 C++98 es war unklar, ob va_start verpflichtet ist,
parm_n s mit überladenem operator& zu unterstützen
erforderlich
LWG 2099 C++98 das Verhalten war undefiniert, wenn parm_n
mit einem Funktions-, Array- oder Referenztyp deklariert wurde
das Verhalten ist undefiniert, wenn
parm_n vom Referenztyp ist

Siehe auch

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