Namespaces
Variants

Variadic functions

From cppreference.net
Utilities library

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

Um eine variadische Funktion zu deklarieren, erscheint eine Ellipse nach der Parameterliste, z.B. int printf ( const char * format... ) ; , der ein optionales Komma vorausgehen kann. Siehe Variadic arguments für zusätzliche Details zur Syntax, automatischen Argumentkonvertierungen und Alternativen.

Um auf die variadischen Argumente aus dem Funktionsrumpf zuzugreifen, werden die folgenden Bibliotheksfunktionen bereitgestellt:

Definiert im 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 die Durchlaufung der variadischen Funktionsargumente
(Funktionsmakro)
enthält die von va_start , va_arg , va_end und va_copy benötigten Informationen
(Typdefinition)

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