Variadic functions
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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
|