Die meisten Funktionen akzeptieren eine feste Anzahl von Argumenten. Einige Anwendungen erfordern jedoch Funktionen mit einer variablen Parameter akzeptieren . Ein bekanntes Beispiel ist die Druckfunktion C. Für solche Fälle , C + + bietet eine leistungsstarke Lösung , die den Compiler entschlüsseln die Argumente können zur Laufzeit. Lesen Sie weiter für ein Tutorial , wie man solche Funktionen implementiert wird . Was Sie brauchen
Intermediate C + +
C + +-Compiler mit IDE , z. B. Microsoft Visual C + +
anzeigen Weitere Anweisungen
1
Fügen Sie die Datei in stdarg.h Bibliothek Ihr Programm . Das ist, wo Sie die Makros zu definieren. In der ersten Zeile der Datei einfügen # include .
2
Verwenden Sie die Makros va_arg , va_start und v_end , dass mit der in va_type stdarg.h zusammenarbeiten.
3
Bauen Sie eine Variable vom Typ va_list als Liste Marker funktionieren .
4
Zugriff auf die einzelnen Parameter mit dem Makro va_arg . Finden Sie einen Weg, um das Makro va_arg sagen, welche Art von Argument Sie es abrufen, um die richtige Anzahl von Bytes aus dem Stapel versorgen wollen .
5
Wandeln Sie das Ergebnis aus Schritt 4, um die Art Sie wollen, dass es zu sein .
6
Rufen Sie den va_end Makro, um die Verarbeitung von variablen Parametern zu beenden.
7
Blick auf das folgende Beispiel zeigt , dass die Schritte 2 bis 6 . Funktion myprintf akzeptiert einen Format-String , der den Typ und die Position jedes Argument gibt . Nach den Format-String ist die Liste der Argumente . Die Funktion druckt die Argumente . Der Einfachheit halber kann es nur bearbeiten, int, float und char : Twitter //Deklaration
nichtig myprintf (char * format , ...); Twitter //defintion
nichtig myprintf (char * format , . ..) {
va_list vl ;
int i;
va_start ( vl, args) ;
for (i = 0; args [ i] = '\\ 0' ; ! + + i) { {
Gewerkschaft any_t
int i;
float f ;
char c ; }
vorhanden;
if ( args [ i] == ' i') {
any.i = va_arg ( vl, int);
printf (" % i \\ n", any.i ); } else
if ( args [ i] == ' f') {
any.f = va_arg ( vl, float) ;
printf ( "% f \\ n", any.f ); } else
if ( args [ i] == 'c') {
any.c = va_arg ( vl, char) ;
printf ("% c \\ n", any.c ); }
else {
werfen SomeException ;
}
va_end ( vl ); }