Benutzer-Werkzeuge

Webseiten-Werkzeuge


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.

FIXME


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki