C-Bibliotheksmakro -va_start()
C-Standardbibliothek - <stdarg.h>
Beschreibung
va_startMakros sind Bestandteil der C-Standardbibliothek.<stdarg.h>Ein Makro in einer Header-Datei, das verwendet wird, um eineva_listVariable zu initialisieren, sodass in einer variadischen Funktion auf die Anzahl der variadischen Argumente zugegriffen werden kann.
C-Bibliotheksmakrovoid va_start(va_list ap, last_arg)InitialisiertapVariable, dieva_argundva_endMakros werden zusammen verwendet.last_argist der letzte bekannte feste Parameter, der an die Funktion übergeben wird, d. h. der Parameter vor den Auslassungspunkten.
Dieses Makro muss verwendet werden, bevorva_argundva_endaufgerufen wurden.
Deklaration
Nachfolgend die Deklaration des Makros va_start().
void va_start(va_list ap, last);
Parameter
va_list ap: Dies ist ein Typ, der für den Zugriff auf variadische Argumente verwendet wird. Er wird nach dem Makroaufruf initialisiert und in nachfolgendemva_argAbrufen von Argumenten in einem Aufruf.last: Dies ist der letzte bekannte feste Parameter vor der Liste der variadischen Argumente. Das heißt, der letzte Parameter in der Funktionsparameterliste, bevor die variadischen Argumente beginnen.
Rückgabewert
N/V
Verwendungsschritte
- Um eine variadische Funktion zu definieren, muss es mindestens einen festen Parameter geben (d. h.,
lastParameter). - Deklariere einen
va_listEine Variable, die zum Speichern von Informationen über die variadische Argumentliste verwendet wird. - Nutzung
va_startMakroinitialisierungva_listVariable. - Nutzung
va_argDas Makro ruft jedes variable Argument der Reihe nach ab. - Nutzung
va_endMakro-Bereinigungva_listVariable.
Beispiel
Das folgende Beispiel veranschaulicht die Verwendung des Makros va_start().
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, verwendet, um Informationen über die variadische Argumentliste zu speichern.va_start(args, count);: initialisierenargs, um zuzugreifen aufcountVariable Argumente, die danach beginnen.total += va_arg(args, int);: Verwendenva_argDas Makro ruft das nächste variadische Argument ab, wobei davon ausgegangen 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_startmuss mitva_list、va_argundva_endWird zusammen verwendet.- Aufruf
va_startDanach müssen Sie aufrufenva_endum die Verarbeitung variabler Argumente zu beenden. - Beim Aufruf
va_startVorher müssen Sie sicherstellen, dass die Parameterliste der Funktion mindestens einen festen Parameter enthält. lastDer Parameter ist der letzte feste Parameter vor der variadischen Argumentliste und wird verwendet, um zu bestimmen, wo mit der Verarbeitung der variadischen Argumente begonnen wird.