Verwendung variabler Parameter-Funktionen in C++

April 16

Die meisten Funktionen akzeptieren eine feste Anzahl von Argumenten. Einige Anwendungen erfordern jedoch Funktionen, Variable Parameter zu akzeptieren. Ein bekanntes Beispiel ist die Druckfunktion von C. Für solche Fälle bietet C++ eine leistungsstarke Lösung, mit der der Compiler die Argumente zur Laufzeit zu entziffern. Lesen Sie weiter für ein Tutorial, das zeigt, wie solche Funktionen implementiert.

Anweisungen

1 Fügen Sie die STDARG. H-Bibliothek-Datei in Ihr Programm. Das ist, wo Sie die Makros definieren. Legen Sie in der ersten Zeile der Datei #include < stdarg.h >.

2 Verwenden Sie die Makros Va_arg, Va_start und V_end, die Zusammenarbeit mit der Va_type in stdarg.h.

3 Richten Sie eine Variable vom Typ Va_list als Liste Marker funktioniert.

4 Zugreifen Sie die einzelnen Parameter mithilfe von das Makro Va_arg. Finde eine Möglichkeit, dem Makro Va_arg sagen, welche Art von Argument abrufen, um die richtige Anzahl von Bytes aus dem Stapel zu versorgen sollen.

5 Wandeln Sie das Ergebnis aus Schritt 4 in den Typ, den Sie es haben wollen.

6 Rufen Sie das Va_end-Makro, um die Verarbeitung von Variable Parameter zu beenden.

7 Betrachten Sie das folgende Beispiel, das Schritte 2 bis 6 zeigt. Myprintf Funktion akzeptiert eine Zeichenfolge, die die Art und Position der einzelnen Argumente angibt. Die Formatzeichenfolge folgt die Liste der Argumente. Die Funktion gibt die Argumente. Der Einfachheit halber können nur Int, Float und Char verarbeitet:

Erklärung

void Myprintf (Char format,...);

Defintion

void Myprintf (Char Format,...) {

Va_list vl;

Int i;

Va_start (vl, Args);

für (i = 0; Args [i]! = '\0'; ++ ich) {}

Union Any_t {}

Int i;

float f;

Char c;

};

Wenn (Args [i] == 'i') {}

any.i = va_arg( vl, int );<br> printf( "%i\n", any.i );<br>

} else

Wenn (Args [i] == 'f') {}

any.f = va_arg( vl, float );<br> printf( "%f\n", any.f );<br>

} else

Wenn (Args [i] == 'c') {}

any.c = va_arg( vl, char );<br> printf( "%c\n", any.c );<br>

}

Else {}

SomeException zu werfen;

}

Va_end (vl);

}