Namespaces
Variants

va_start

From cppreference.net
Utilities library
Definiert im Header <cstdarg>
void va_start ( std :: va_list ap, parm_n ) ;

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

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

Wenn parm_n eine Pack-Erweiterung oder eine Entität aus einer Lambda-Aufnahme ist, ist das Programm fehlerhaft, keine Diagnose erforderlich.

(seit C++11)

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

Inhaltsverzeichnis

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