funktion mit vordefinierten variablen

Gast #5607846
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
Gast #5607888
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.
Gast #5607891
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
Persönliche Seite #5607893
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:
1
// Prototyp
2
int bla(int fusel, int laber = 0);
3

4

5
...
6
// Implementierung
7
int bla(int fusel, int laber)
8
{
9
  ... etc
10
}

In C aber gibt es das nicht.
#5607896
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.
Gast #5607983
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);
Gast #5608012
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);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.