edv:prg:c:tipp:funktionen_mit_variabler_anzahl_von_parameter
Funktionen mit variabler Anzahl von Parameter
Wie schreibe ich eine Funktion, die, wie z.B. die printf(), eine variable Anzahl von Parameter hat?
(Als Grundlage für dieses Beispiel wurde http://pronix.linuxdelta.de/C/standard_C/c_programmierung_21.shtml von Jürgen Wolf genutzt.)
Die printf() ist wie folgt deklariert:
int printf(const char *format, ...);
Um solche Funktionen wie printf() zu schreiben sind folgende Makros aus <stdarg.h> nötig:
Makro | Syntax | Kommentar |
---|---|---|
va_list | va_list name; | Abstrakter Datentyp, mit dem die Liste der Parameter definiert wird. |
va_start | va_start(va_list name, lastarg); | Argumentliste wird initialisiert. |
va_arg | typ = va_arg(va_list name,typ); | Liest den nächsten Parameter in der Argumentliste. |
va_end | void va_end(va_list name); | Schließt die Argumentliste. |
Als erstes Beispiel, eine Funktion, die das Ende der Parameterliste an einem bestimmten Wert erkennt.
#include <stdio.h> #include <stdarg.h> int addInt (int iZahlen, ...) // Berechnet die Summe aller als Parameter angegebenen Zahlen { va_list pParameter; int iAktuelleZahl; va_start(pParameter, iZahlen); // Pointer auf den 1. Parameter setzen do { iAktuelleZahl = va_arg(pParameter, int); iZahlen += iAktuelleZahl; } while (iAktuelleZahl != 0); // Die Zahl 0 dient als Begrenzer der Zahlenreihe va_end(pParameter); return iZahlen; } // addInt() int main () { int iSumme; printf("1 + 3 + 8 = %d\n", addInt(1, 3, 8, 0)); iSumme = addInt(10, 15, 27, 0) + addInt(3, 13, 33, 0); printf("(10 + 15 + 27) + (3 + 13 + 33) = %d\n", iSumme); return 0; } // main()
Als zweites Beispiel, eine Funktion, die die Anzahl der (restlichen) Parameter als Wert im ersten Parameter übergibt.
#include <stdio.h> #include <stdarg.h> void printInt (int iAnzahl, ...) { va_list pParameter; int iAktuelleZahl; int i; printf("Es werden %d Zahlen ausgegeben:\n", iAnzahl); va_start(pParameter, iAnzahl); // Pointer auf den 1. Parameter setzen for (i = 1; i <= iAnzahl; i++) { iAktuelleZahl = va_arg(pParameter, int); printf("%d\t", iAktuelleZahl); } // for printf("\n"); va_end(pParameter); } // printInt() int main () { printInt(4, 1, 2, 3, 4); // 4 Zahlen ausgeben (1 + 4 Parameter) printInt(6, 11, 22, 33, 44, 55, 66); // 6 Zahlen ausgeben (1 + 6 Parameter) return 0; } // main()
In diesem Zusammenhang sind die Funktionen vprintf(), vsprintf() und vfsprintf() von Interesse.
Stand: 21.11.2012 — : Jürgen Kreick
EOF
edv/prg/c/tipp/funktionen_mit_variabler_anzahl_von_parameter.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1