C - Variable Argumente
Manchmal können Sie auf eine Situation stoßen, in der Sie eine Funktion haben möchten, die eine variable Anzahl von Argumenten, dh Parametern, anstelle einer vordefinierten Anzahl von Parametern annehmen kann. Die Programmiersprache C bietet eine Lösung für diese Situation und Sie können eine Funktion definieren, die je nach Anforderung eine variable Anzahl von Parametern akzeptieren kann. Das folgende Beispiel zeigt die Definition einer solchen Funktion.
int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); }
Zu beachten ist, dass die Funktion func() hat sein letztes Argument als Ellipsen, d.h. drei Punkte (... ) und derjenige direkt vor den Ellipsen ist immer ein int was die Gesamtzahl der übergebenen Variablenargumente darstellt. Um diese Funktionalität zu nutzen, müssen Sie stdarg.h verwenden Header-Datei, die die Funktionen und Makros bereitstellt, um die Funktionalität von Variablenargumenten zu implementieren und den angegebenen Schritten zu folgen −
-
Definieren Sie eine Funktion mit ihrem letzten Parameter als Ellipsen und der Parameter direkt vor den Ellipsen ist immer ein int die die Anzahl der Argumente darstellt.
-
Erstellen Sie eine va_list Typ Variable in der Funktionsdefinition. Dieser Typ ist in der Header-Datei stdarg.h definiert.
-
Verwenden Sie int Parameter und va_start Makro zum Initialisieren der va_list Variable zu einer Argumentliste. Das Makro va_start ist in der Header-Datei stdarg.h definiert.
-
Verwenden Sie va_arg Makro und va_list Variable, um auf jedes Element in der Argumentliste zuzugreifen.
-
Verwenden Sie ein Makro va_end um den va_list zugewiesenen Speicher zu bereinigen Variable.
Lassen Sie uns nun den obigen Schritten folgen und eine einfache Funktion aufschreiben, die die variable Anzahl von Parametern nehmen und ihren Durchschnitt zurückgeben kann −
Live-Demo#include <stdio.h> #include <stdarg.h> double average(int num,...) { va_list valist; double sum = 0.0; int i; /* initialize valist for num number of arguments */ va_start(valist, num); /* access all the arguments assigned to valist */ for (i = 0; i < num; i++) { sum += va_arg(valist, int); } /* clean memory reserved for valist */ va_end(valist); return sum/num; } int main() { printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5)); printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15)); }
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis. Zu beachten ist, dass die Funktion average() wurde zweimal aufgerufen, und jedes Mal repräsentiert das erste Argument die Gesamtzahl der übergebenen Variablenargumente. Nur Ellipsen werden verwendet, um eine variable Anzahl von Argumenten zu übergeben.
Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000
C Sprache