C-Standardbibliothek -<stdarg.h>
<stdarg.h>ist eine Header-Datei in der C-Standardbibliothek, die eine Reihe von Makros für den Zugriff auf eine variable Anzahl von Argumenten bereitstellt.
stdarg.hDie Header-Datei definiert einen Variablentypva_listund drei Makros, die verwendet werden können, um die Argumente in einer Funktion abzurufen, wenn die Anzahl der Argumente unbekannt ist (d. h., die Anzahl der Argumente ist variabel).
Funktionen mit variablen Argumenten verwenden normalerweise Auslassungspunkte am Ende der Parameterliste....definiert.
Bibliotheksvariablen
Im Folgenden sind die in der Header-Datei stdarg.h definierten Variablentypen aufgeführt:
| Laufende Nummer | Variablen & Beschreibung |
|---|---|
| 1 | va_list Dies gilt fürva_start(), va_arg()undva_end()Der Typ, in dem diese drei Makros Informationen speichern. Der Typ, der zum Speichern von Informationen über variable Argumente verwendet wird. |
Bibliotheksmakros
Im Folgenden sind die in der Header-Datei stdarg.h definierten Makros aufgeführt:
| Laufende Nummer | Makros & Beschreibung |
|---|---|
| 1 | void va_start(va_list ap, last_arg) Dieses Makro initialisiert dieap-Variable, die vonva_argundva_end verwendet wird.Die Makros werden zusammen verwendet.last_argist der letzte bekannte feste Parameter, der an die Funktion übergeben wird, d. h. der Parameter vor der Ellipse. |
| 2 | type va_arg(va_list ap, type) Dieses Makro ruft ein Argument vom Typtypeaus dem nächsten Parameter ab. |
| 3 | void va_end(va_list ap) Dieses Makro ist nun zur Verwendung verfügbarva_startEine Funktion mit variablen Argumenten kehrt über das Makro zurück. Wennva_endnicht vor der Rückkehr aus der Funktion aufgerufen wird, ist das Ergebnis undefiniert. |
Beispiel
Das Folgende ist ein Beispiel unter Verwendung von<stdarg.h>Ein Beispiel für die Implementierung einer variadischen Funktion. Diese Funktion berechnet die Summe aller Parameter:
Beispiel
#include <stdarg.h>
// Berechne die Summe der variablen Argumente
int sum(int count, ...) {
int total = 0;
va_list args;
// args initialisieren, um auf variadische Argumente zuzugreifen
va_start(args, count);
// Nacheinander auf variable Argumente zugreifen
for (int i = 0; i < count; i++) {
total += va_arg(args, int);
}
// args aufräumen
va_end(args);
return total;
}
int main() {
printf("Summe von 1, 2, 3: %d\n", sum(3, 1, 2, 3)); // Ausgabe 6
printf("Summe von 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7)); // Ausgabe 22
return 0;
}
Ausgabe:
Sum of 1, 2, 3: 6 Sum of 4, 5, 6, 7: 22
Parsen
va_list args;: deklariere eineva_listVariable, die für den Zugriff auf variadische Argumente verwendet wird.va_start(args, count);: initialisierenargsUm die variadische Argumentliste zu durchlaufen, beginnend beicountDer erste Parameter danach.total += va_arg(args, int);: Holt den nächsten Parameter in der Liste variabler Argumente ab und akkumuliert ihn zutotal. Der Parametertyp istint。va_end(args);: Aufräumenargs。
Hinweise
- Der Typ jedes Arguments in der Liste variabler Argumente muss explizit sein und muss konsistent übergeben werden an
va_arg。 - Nutzung
va_startDanach muss verwendet werdenva_endBereinigungva_listVariable. va_start、va_argundva_endDie Makros sollten innerhalb einer Funktion paarweise verwendet werden, um undefiniertes Verhalten zu vermeiden.