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 NummerVariablen & Beschreibung
1va_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 NummerMakros & Beschreibung
1void 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.
2type va_arg(va_list ap, type)
Dieses Makro ruft ein Argument vom Typtypeaus dem nächsten Parameter ab.
3void 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 <stdio.h>
#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 anva_arg。
  • Nutzungva_startDanach muss verwendet werdenva_endBereinigungva_listVariable.
  • va_start、va_argundva_endDie Makros sollten innerhalb einer Funktion paarweise verwendet werden, um undefiniertes Verhalten zu vermeiden.
Weitere Erweiterungen