Variable Argumente in C meistern: Ein praktischer Leitfaden
Manchmal stoßen Sie auf eine Situation, in der Sie eine Funktion benötigen, die eine variable Anzahl von Argumenten (Parameter) entgegennehmen kann, anstatt einer vordefinierten Anzahl. Die C-Programmiersprache bietet eine Lösung für diese Situation: Sie können eine Funktion definieren, die basierend auf Ihren Anforderungen eine variable Anzahl von Parametern akzeptiert. Das folgende Beispiel zeigt die Definition einer solchen Funktion.
int func(int, ... ) {
. . .
}
int main() {
func(1, 2, 3);
func(1, 2, 3, 4);
}
Es ist zu beachten, dass die Funktion func() ihr letztes Argument als Ellipse (drei Punkte ...) hat und das Argument direkt vor der Ellipse immer ein int ist, das die Gesamtzahl der übergebenen variablen Argumente repräsentiert. Um diese Funktionalität zu nutzen, müssen Sie die Header-Datei stdarg.h verwenden, die die Funktionen und Makros zur Implementierung der Funktionalität variabler Argumente bereitstellt. Folgen Sie diesen Schritten:
Definieren Sie eine Funktion mit ihrem letzten Parameter als Ellipse; der Parameter direkt vor der Ellipse ist immer ein int, der die Anzahl der Argumente repräsentiert.
Erstellen Sie eine va_list-Typvariable in der Funktionsdefinition. Dieser Typ ist in der Header-Datei stdarg.h definiert.
Verwenden Sie den int-Parameter und das va_start-Makro, um die va_list-Variable auf eine Argumentliste zu initialisieren. Das Makro va_start ist in stdarg.h definiert.
Verwenden Sie das va_arg-Makro und die va_list-Variable, um auf jedes Element in der Argumentliste zuzugreifen.
Verwenden Sie das Makro va_end, um den der va_list-Variable zugewiesenen Speicher freizugeben.
Nun folgen wir den obigen Schritten und schreiben eine einfache Funktion, die eine variable Anzahl von Parametern entgegennehmen und deren 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;
/* initialisiere valist für num Anzahl von Argumenten */
va_start(valist, num);
/* greife auf alle Argumente zu, die valist zugewiesen sind */
for (i = 0; i < num; i++) {
sum += va_arg(valist, int);
}
/* bereinige den für valist reservierten Speicher */
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. Beachten Sie, dass die Funktion average() zweimal aufgerufen wurde und jedes Mal das erste Argument die Gesamtzahl der übergebenen variablen Argumente repräsentiert. 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
- Vier bewährte Muster für benutzerdefinierte Funktionen in C
- C Speicherklassen verstehen: Gültigkeitsbereich, Lebensdauer und Performance
- Arrays an Funktionen in C übergeben: 1D & 2D – Praxisleitfaden
- Python-Funktionsargumente meistern: Positional, Keyword & Default-Parameter
- C++ Variablen und Datentypen: Experten‑Guide zu int, double, char, string, bool
- C Variablen, Datentypen und Konstanten – Ein praktischer Leitfaden
- Verilog Assignments verstehen: Typen, Syntax und Best Practices
- Variablen in C verstehen: Typen, Benennungsregeln & Speicherverwaltung
- C-Funktionen meistern: Struktur, Deklaration & Best Practices
- C-Zeiger meistern: Praktische Schritte zur fortgeschrittenen Programmierung