Namespaces
Variants

Variadic functions

From cppreference.net
< c

Variadic-Funktionen sind Funktionen (z.B. printf ), die eine variable Anzahl von Argumenten akzeptieren.

Die Deklaration einer variadischen Funktion verwendet eine Ellipse als letzten Parameter, z.B. int printf ( const char * format, ... ) ; . Siehe variadische Argumente für zusätzliche Details zur Syntax und automatischen Argumentkonvertierungen.

Der Zugriff auf die variadischen Argumente aus dem Funktionsrumpf verwendet die folgenden Bibliotheksfunktionen:

Inhaltsverzeichnis

Typen
enthält die von va_start , va_arg , va_end und va_copy benötigten Informationen
(typedef)
Makros
Definiert im Header <stdarg.h>
ermöglicht den Zugriff auf variadische Funktionsargumente
(Funktionsmakro)
greift auf das nächste variadische Funktionsargument zu
(Funktionsmakro)
(C99)
erstellt eine Kopie der variadischen Funktionsargumente
(Funktionsmakro)
beendet die Verarbeitung der variadischen Funktionsargumente
(Funktionsmakro)

Beispiel

Werte verschiedener Typen ausgeben.

#include <stdarg.h>
#include <stdio.h>
void simple_printf(const char* fmt, ...)
{
    va_list args;
    for (va_start(args, fmt); *fmt != '\0'; ++fmt)
    {
        switch(*fmt)
        {
            case 'd':
            {
                int i = va_arg(args, int);
                printf("%d\n", i);
                break;
            }
            case 'c':
            {
                // A 'char' variable will be promoted to 'int'
                // A character literal in C is already 'int' by itself
                int c = va_arg(args, int);
                printf("%c\n", c);
                break;
            }
            case 'f':
            {
                double d = va_arg(args, double);
                printf("%f\n", d);
                break;
            }
            default:
                puts("Unknown formatter!");
                goto END;
        }
    }
END:
    va_end(args);
}
int main(void)
{
    simple_printf("dcff", 3, 'a', 1.969, 42.5);
}

Ausgabe:

3
a
1.969000
42.50000

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.16 Variable Argumente <stdarg.h> (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.16 Variable Argumente <stdarg.h> (S: TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.16 Variable Argumente <stdarg.h> (S: 269-272)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.15 Variable Argumente <stdarg.h> (S: 249-252)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.8 VARIABLE ARGUMENTS <stdarg.h>

Siehe auch

C++ Dokumentation für Variadic functions