Hallo,
gibt es eine möglichkeit in C eine Funktion mit deklarierten Variablen
zu definieren? So dass ich die Funktion nicht mit allen Variablen
aufrufen muss?
z.B.
1
uint8_t volume(x, y, z=0);
wenn ich jettz volume(1,2) aufrufen würde, dass z automatisch als 0
angenommen wird?
Jens
Nein. Das ist ein Feature von C#. In C++ könntest Du immerhin die
Funktion überladen, also eine zweite Variante erstellen, die nur 2
Parameter erwartet und sich dann so verhält, als wäre z==0.
fop schrieb:> Nein. Das ist ein Feature von C#. In C++ könntest Du immerhin die> Funktion überladen, also eine zweite Variante erstellen, die nur 2> Parameter erwartet und sich dann so verhält, als wäre z==0.
Ich dachte in C++ wäre es auch möglich. Dann muss ich halt immer 0
mitsenden.
Danke
> Das ist ein Feature von C#.
Andersrum. C++ kann 'default arguments' [0] (und formale Parameter sind
Bestandteil der Funktionssignatur), Zeh-Häsch hat es übernommen.
In C macht man sowas mit va_arg. Aber nur wenn es unbedingt sein muss,
nicht für Spaß.
[0] https://en.cppreference.com/w/cpp/language/default_arguments
fop schrieb:> Nein. Das ist ein Feature von C#. In C++ könntest Du immerhin die> Funktion überladen,
Das ist nicht nötig, da es in C++ exakt dieselben Defaultargumente mit
exakt derselben Syntax gibt. Sie müssen in der Deklaration (d.h. dem
Funktionsprototypen) und nicht der Definition (der eigentlichen
Funktion) angegeben werden:
Jens schrieb:> Hallo,> gibt es eine möglichkeit in C eine Funktion mit deklarierten Variablen> zu definieren? So dass ich die Funktion nicht mit allen Variablen> aufrufen muss?>> z.B.>
1
> uint8_t volume(x, y, z=0);
2
>
>> wenn ich jettz volume(1,2) aufrufen würde, dass z automatisch als 0> angenommen wird?>> Jens
Wobei das Ergebnis für volume(x,y); x,y:beliebig, falls der Name nicht
in die Irre führen soll, wohl nicht mal einen Aufruf erfordert.
Rufus Τ. F. schrieb:> // Prototyp> int bla(int fusel, int laber = 0);
Müssen die Default-Params nicht von links und lückenlos erfolgen:
... (int foo = 123, int myfoo = 456, int blabla, int blub);
aber nicht
... (int myfoo = 456, int blabla, int blub, int foo = 123);
unsicher schrieb:> Rufus Τ. F. schrieb:>> // Prototyp>> int bla(int fusel, int laber = 0);>> Müssen die Default-Params nicht von links und lückenlos erfolgen:>> ... (int foo = 123, int myfoo = 456, int blabla, int blub);>> aber nicht> ... (int myfoo = 456, int blabla, int blub, int foo = 123);
Nein! Sie müssen "von rechts lückenlos" erfolgen
> ... (int myfoo, int blabla, int blub = 456, int foo = 123);
unsicher schrieb:> oder so, aber ich wusste, da war doch was ... ;_)
Ich hab' nicht drauf hingewiesen, aber mein hochkomplexes Beispiel
erfüllt die Bedingung trotzdem ...