Also theoretisch kannst du C++ verwenden (überladene Funktionen gibt es in C ja nicht), praktisch habe ich persönlich das allerdings noch nicht in einer zufriedenstellenden Art zum laufen gebracht.
(ich vermute wegen Problemen mit meinem Makefile)
Wenn du nur mit C auskommen möchtest, musst du die "..."-Variante nehmen...
Dabei muss der Benutzer übrigens nicht zwangsweise gleich die Anzahl an Parametern übergeben, man kann auch auf anderem Wege ermitteln welcher der letzte ist. Man könnte z.B. als letzten Parameter einfach ein "-1" übergeben, oder sonst irgendwas was sich eindeutig identifizieren lässt. Vielleicht ergibt sich die Anzahl der Parameter ja aber auch automatisch aus den bisher verwendeten Parametern ("wenn erster Parameter = xy kommen maximal noch 2" oder sonst irgendwas in der Richtung, was sinnvoll ist und was nicht hängt von der Funktion ab).
Ich versuche mal kurz zu erklären wie man eine Funktion mit einer beliebigen Anzahl von Parametern in C realisiert:
du benötigst die stdarg.h, in dieser sind mehrere Makros definiert:
1. va_list
das ist ein Datentyp der die nötigen Informationen für die Argumentliste enthält, um den man sich aber sonst nicht weiter kümmern muss.
2. va_start(va_list, ParamN)
muss vor der Auswertung der Parameter aufgerufen werden. va_list ist dabei natürlich der Name einer va_list (die man zuvor erstellt hat), ParamN ist der Name des letzten festgelegten Arguments (also das vor den ...).
3. va_arg(va_list, type)
liefert dir den nächsten Parameter. type ist der Datentyp des Parameters und muss bekannt sein!
4. va_end(va_list)
wenn die Parameter alle ausgewertet worden sind, muss man noch dieses Makro aufrufen.
mal ein konkretes Beispiel:
Code:
int zahlenaddieren(int a, ...) //ja, das ... steht wirklich da!
{
int ergebnis = 0;
int tmp;
va_list meineparameter;
va_start(meineparameter, a)
do
{
tmp = va_arg(meineparameter, int);
ergebnis = ergebnis + tmp;
} while (tmp != 0);
va_end(meineparameter)
}
Diese Funktion sollte sämtliche Zahlen addieren die man ihr übergibt, bis eine 0 kommt. D.h. man müsste hier also am Ende immer eine 0 mit übergeben, damit die Funktion weiß wann sie aufhören soll.
Lesezeichen