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 das
va_startMakroinitialisierungva_listVariable. - Nutzung
va_argMakro, um jedes variadische Argument nacheinander abzurufen. - Nach der Verarbeitung aller variadischen Argumente verwenden Sie das
va_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 <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 verwenden
va_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.- Aufruf
va_endNach,va_listDie Variable ist dann nicht mehr gültig und sollte nicht erneut verwendet werden.