C Variable Argumente
Manchmal kann es vorkommen, dass Sie eine Funktion mit einer variablen Anzahl von Argumenten anstelle einer vordefinierten Anzahl von Argumenten haben möchten.
Die Sprache C bietet eine Lösung für diese Situation, mit der Sie eine Funktion definieren können, die entsprechend den spezifischen Anforderungen eine variable Anzahl von Argumenten akzeptieren kann.
Die Deklarationsmethode ist:
int func_name(int arg1, ...);
Dabei steht die Ellipse...für eine variable Argumentliste.
Das folgende Beispiel veranschaulicht die Verwendung dieser Funktion:
Bitte beachten Sie: Die Funktionfunc()Der letzte Parameter wird als Ellipse geschrieben, d. h. als drei Punkte (...), der Parameter vor der Ellipse istint, der die Gesamtzahl der zu übergebenden variablen Argumente angibt. Um diese Funktion zu verwenden, müssen Sie diestdarg.hHeader-Datei, die Funktionen und Makros für die Implementierung variabler Argumente bereitstellt. Die genauen Schritte sind wie folgt:
- Definieren Sie eine Funktion, deren letzter Parameter eine Ellipse ist, und vor der Ellipse können benutzerdefinierte Parameter festgelegt werden.
- Erstellen Sie in der Funktionsdefinition eine Variable vom Typva_list; dieser Typ ist in der Header-Datei stdarg.h definiert.
- Verwendung vonintParametern undva_start()Makro zum Initialisieren vonva_listVariable als Parameterliste. Das Makrova_start()ist in der Header-Datei stdarg.h definiert.
- Verwendung vonva_arg()Makro undva_listVariable, um auf jedes Element in der Argumentliste zuzugreifen.
- Verwenden Sie das Makrova_end(), um den zugewiesenenva_listSpeicher der Variablen freizugeben.
Häufig verwendete Makros sind:
-
va_start(ap, last_arg): Initialisiert die Liste der variablen Argumente.apist einva_listEine Variable vom Typ,last_argist der Name des letzten festen Parameters (das heißt, des Parameters vor der Liste variabler Argumente). Dieses Makro bewirktapauf den ersten Parameter in der Liste variabler Argumente zeigen zu lassen. -
va_arg(ap, type): Den nächsten Parameter in der Liste variabler Argumente abrufen.apist einva_listEine Variable vom Typ,typeist der Typ des nächsten Parameters. Dieses Makro liefert einen Wert vom Typtypeden Wert, undapzeigt auf das nächste Argument. -
va_end(ap): Beendet den Zugriff auf die Liste variabler Argumente.apist einva_listVariable vom Typ. Dieses Makroapgesetzt aufNULL。
Nun wollen wir die oben genannten Schritte befolgen, um eine Funktion mit einer variablen Anzahl von Parametern zu schreiben und deren Durchschnitt zurückzugeben:
Beispiel
Im obigen Beispiel akzeptiert die Funktion average() ein ganzzahliges num und beliebig viele ganzzahlige Argumente. Innerhalb der Funktion wird eine Variable va_list vom Typ va_list verwendet, um auf die variable Argumentliste zuzugreifen. In der Schleife wird jedes Mal das Makro va_arg() verwendet, um das nächste ganzzahlige Argument abzurufen und auszugeben. Schließlich wird am Ende der Funktion das Makro va_end() verwendet, um den Zugriff auf die variable Argumentliste zu beenden.
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse. Es ist zu beachten, dass die Funktion average()zweimal aufgerufen wird und jedes Mal der erste Parameter die Gesamtzahl der übergebenen variablen Argumente angibt. Die Ellipse wird verwendet, um eine variable Anzahl von Argumenten zu übergeben.
Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000Weitere Erweiterungen