Namespaces
Variants

Variadische Funktionen

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Dreiseitiger Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch- und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Gängige Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 

Variadische Funktionen sind Funktionen (z.B. std::printf), die eine variable Anzahl von Argumenten entgegennehmen.

Um eine variadische Funktion zu deklarieren, erscheint eine Ellipse nach der Liste der Parameter, z.B. int printf(const char* format...);, der ein optionales Komma vorausgehen kann. Siehe Variadische Argumente für weitere Details zur Syntax, automatischen Argumentkonvertierungen und den Alternativen.

Um aus dem Funktionskörper auf die variadischen Argumente zuzugreifen, werden die folgenden Bibliothekshilfsmittel bereitgestellt:

Definiert in Header <cstdarg>
ermöglicht den Zugriff auf variadische Funktionsargumente
(Funktionsmakro)
greift auf das nächste variadische Funktionsargument zu
(Funktionsmakro)
(C++11)
erstellt eine Kopie der variadischen Funktionsargumente
(Funktionsmakro)
beendet den Durchlauf der variadischen Funktionsargumente
(Funktionsmakro)
enthält die Informationen, die von va_start, va_arg, va_end und va_copy
benötigt werden

Beispiel

#include <cstdarg>
#include <iostream>
void simple_printf(const char* fmt...) // C-style "const char* fmt, ..." is also valid
{
    va_list args;
    va_start(args, fmt);
    while (*fmt != '\0')
    {
        if (*fmt == 'd')
        {
            int i = va_arg(args, int);
            std::cout << i << '\n';
        }
        else if (*fmt == 'c')
        {
            // note automatic conversion to integral type
            int c = va_arg(args, int);
            std::cout << static_cast<char>(c) << '\n';
        }
        else if (*fmt == 'f')
        {
            double d = va_arg(args, double);
            std::cout << d << '\n';
        }
        ++fmt;
    }
    va_end(args);
}
int main()
{
    simple_printf("dcff", 3, 'a', 1.999, 42.5); 
}

Ausgabe:

3
a
1.999
42.5

Siehe auch

C-Dokumentation für Variadic functions