C-Bibliotheksmakro -va_end()

C-Standardbibliothek - <stdarg.h>

va_endDas Makro ist in der C-Standardbibliothek<stdarg.h>ein Makro in der Header-Datei, das zum Aufräumen verwendet wirdva_listVariable und dafür sorgen, dass sie nicht mehr auf eine gültige Speicherstelle zeigt. Sie wird am Ende einer variadischen Funktion verwendet, um die Behandlung variadischer Argumente zu beenden.

C-Bibliotheksmakrovoid va_end(va_list ap)Ermöglicht die Verwendung vonva_startDas Makro kehrt aus einer Funktion mit variadischen Argumenten zurück. Wenn es nicht vor dem Zurückkehren aus der Funktion aufgerufen wird...va_end, dann ist das Ergebnis undefiniert.

Deklaration

Nachfolgend finden Sie die Deklaration des Makros va_end().

void va_end(va_list ap);

Parameter

  • va_list ap: Dies ist einva_listVariablen des Typs, die bereits übergeben wurdenva_startoderva_copyDas Makro initialisiert und wird verwendet, um auf die Liste der variablen Argumente zuzugreifen.

Rückgabewert

Dieses Makro gibt keinen Wert zurück.

Verwendungsschritte

  • In einer variadischen Funktion verwenden Sie dasva_startMakroinitialisierungva_listVariable.
  • Nutzungva_argMakro, um jedes variadische Argument nacheinander abzurufen.
  • Nach der Verarbeitung aller variadischen Argumente verwenden Sie dasva_endMakro-Bereinigungva_listVariable.

Beispiel

Das Folgende ist ein Beispiel für die Verwendung vonva_endEin Beispielprogramm für das Makro, das eine variadische Funktion definiert, um die Summe einer variablen Anzahl von Argumenten zu berechnen:

Beispiel

#include <stdio.h>
#include <stdarg.h>

// Variadische Funktion, berechnet die Summe der Argumente
int sum(int count, ...) {
    int total = 0;
    va_list args;

    // args initialisieren, um auf variadische Argumente zuzugreifen
    va_start(args, count);

    // Jedes variadische Argument nacheinander abrufen und zu total addieren
    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;
}

Lassen Sie uns das obige Programm kompilieren und ausführen. Dies wird das folgende Ergebnis liefern:

Sum of 1, 2, 3: 6
Sum of 4, 5, 6, 7: 22

Parsen

  • va_list args;: deklariere eineva_listVariable vom Typargs, das verwendet wird, um Informationen über die variable Argumentliste zu speichern.
  • va_start(args, count);: initialisierenargs, um zuzugreifen aufcountdie variadischen Argumente, die danach beginnen.
  • total += va_arg(args, int);: Verwendenva_argDas Makro ermittelt das nächste variadische Argument, wobei hier angenommen wird, dass sie alle...intTyp, und es in die akkumulierentotalder Variablen akkumulieren.
  • va_end(args);: Aufräumenargs, um Ressourcen freizugeben und undefiniertes Verhalten zu vermeiden.

Hinweise

  • Jedes Mal, wenn Sie verwendenva_startInitialisierenva_listnach der Variable müssen Sie verwendenva_endBereinigen Sie es.
  • va_endDas Makro wird zum Bereinigen verwendetva_listVariable, um etwaige Ressourcen freizugeben und potenzielle Speicherprobleme zu vermeiden, bevor aus der Funktion zurückgekehrt wird.
  • Aufrufva_endNach,va_listDie Variable ist dann nicht mehr gültig und sollte nicht erneut verwendet werden.

C-Standardbibliothek - <stdarg.h>

Weitere Erweiterungen