Variabele Argumenten in C: Een Praktische Gids
Soms kom je een situatie tegen waarin je een functie wilt hebben die een variabel aantal argumenten kan accepteren, d.w.z. parameters, in plaats van een vooraf gedefinieerd aantal parameters. De C-programmeertaal biedt een oplossing voor deze situatie en je mag een functie definiëren die een variabel aantal parameters kan accepteren op basis van je vereiste. Het volgende voorbeeld toont de definitie van zo'n functie.
int func(int, ... ) {
. . .
}
int main() {
func(1, 2, 3);
func(1, 2, 3, 4);
}
Het moet opgemerkt worden dat de functie func() haar laatste argument heeft als ellipsis, d.w.z. drie puntjes (...) en het er net voor de ellipsis is altijd een int wat het totale aantal variabele argumenten vertegenwoordigt dat doorgegeven is. Om dergelijke functionaliteit te gebruiken, moet je gebruikmaken van het stdarg.h header-bestand dat de functies en macro's biedt om de functionaliteit van variabele argumenten te implementeren en de gegeven stappen volgen:
Definieer een functie met haar laatste parameter als ellipsis en degene net voor de ellipsis is altijd een int wat het aantal argumenten vertegenwoordigt.
Maak een va_list type variabele in de functiedefinitie. Dit type is gedefinieerd in stdarg.h header-bestand.
Gebruik int parameter en va_start macro om de va_list variabele te initialiseren naar een argumentenlijst. De macro va_start is gedefinieerd in stdarg.h header-bestand.
Gebruik va_arg macro en va_list variabele om elk item in de argumentenlijst te benaderen.
Gebruik een macro va_end om het geheugen toegekend aan va_list variabele op te schonen.
Nu laten we de bovenstaande stappen volgen en een eenvoudige functie schrijven die een variabel aantal parameters kan accepteren en hun gemiddelde retourneert:
Live Demo#include <stdio.h>
#include <stdarg.h>
double gemiddelde(int num,...) {
va_list valist;
double sum = 0.0;
int i;
/* initialiseer valist voor num aantal argumenten */
va_start(valist, num);
/* benader alle argumenten toegewezen aan valist */
for (i = 0; i < num; i++) {
sum += va_arg(valist, int);
}
/* schoon geheugen gereserveerd voor valist */
va_end(valist);
return sum/num;
}
int main() {
printf("Gemiddelde van 2, 3, 4, 5 = %f\n", gemiddelde(4, 2,3,4,5));
printf("Gemiddelde van 5, 10, 15 = %f\n", gemiddelde(3, 5,10,15));
}
Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat. Het moet opgemerkt worden dat de functie gemiddelde() tweemaal is aangeroepen en elke keer het eerste argument het totale aantal variabele argumenten vertegenwoordigt dat doorgegeven wordt. Alleen ellipsis zal gebruikt worden om variabel aantal argumenten door te geven.
Gemiddelde van 2, 3, 4, 5 = 3.500000 Gemiddelde van 5, 10, 15 = 10.000000
C Taal
- Vier bewaarde patronen voor gebruiksgedefinieerde functies in C
- C-opslagklassen begrijpen: Bereik, levensduur en prestaties
- Hoe je 1D- en 2D-arrays doorgeeft aan functies in C – Een praktische gids
- C++ Variabelen en Datatypes: Expert‑handleiding voor int, double, char, string, bool
- C Variabelen, Datatypes en Constanten – Een Praktische Gids
- Variabelen in C: Types, naamgevingsregels en geheugenbeheer
- C-functies: Structuur, declaratie, aanroep en argumenten
- C-pointers: Praktische stappen naar geavanceerd programmeren
- Efficiënt geheugengebruik met C-bitvelden
- Verilog-toewijzingen begrijpen: types, syntax en best practices
- Python Functie-argumenten onder de knie krijgen: Positionele, Keyword en Default Parameters