C-Bibliotheksmakro -va_arg()
C-Standardbibliothek - <stdarg.h>
va_argDas Makro ist eine C-Standardbibliothek<stdarg.h>Ein Makro in der Header-Datei, das verwendet wird, um nacheinander den Wert jedes variablen Arguments in einer variadischen Funktion abzurufen. Es wird verwendet nachva_startMakro initialisiertva_listdie Variable, um auf das nächste Argument in der variablen Argumentliste zuzugreifen.
Deklaration
Nachfolgend ist die Deklaration des va_arg()-Makros aufgeführt.
type va_arg(va_list ap, type);
Parameter
va_list ap: einsva_listVariable vom Typ, die bereits durchlaufen wurdeva_startDas Makro initialisiert, wobei es auf die aktuelle Position in der variablen Argumentliste zeigt.type: Der Typ des nächsten abzurufenden Arguments. Er muss ein Typ sein, der eindeutig identifiziert werden kann.
Rückgabewert
Gibt das nächste Argument in der aktuellen variablen Argumentliste mit dem Typ type zurück.
Verwendungsschritte
- In einer variadischen Funktion verwenden Sie
va_startMakroinitialisierungva_listVariable. - Nutzung
va_argdas Makro zum sequenziellen Abrufen jedes variablen Arguments. - Nutzung
va_endMakro-Bereinigungva_listVariable.
Beispiel
Das Folgende ist eine Verwendung vonva_argEin 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, was das folgende Ergebnis erzeugt:
Sum of 1, 2, 3: 6 Sum of 4, 5, 6, 7: 22
Parsen
va_list args;: deklariere eineva_listVariable vom Typargs, wird verwendet, um Informationen über die variable Argumentliste zu speichern.va_start(args, count);: initialisierenargs, um zuzugreifen aufcountdie variablen Argumente, die danach beginnentotal += va_arg(args, int);: Verwendenva_argDas Makro ruft das nächste variable Argument ab, wobei hier angenommen wird, dass sie alleintvom Typ sind und es intotalder Variablen akkumulieren.va_end(args);: Aufräumenargs, um Ressourcen freizugeben und undefiniertes Verhalten zu vermeiden.
Hinweise
va_argDas Makro sollteva_startDann verwenden Sie es, und beiva_endvorher verwendet.typeDas Argument muss ein bestimmter Typ sein, und es sollte mit dem tatsächlichen Typ des variablen Arguments übereinstimmen.- Wenn beim Aufruf
va_argWenn es die Anzahl der variablen Argumente überschreitet, ist das Verhalten undefiniert. - Nutzung
va_endBereinigungva_listDie Variable ist notwendig, um potenzielle Ressourcenlecks oder undefiniertes Verhalten zu vermeiden.