Optionale Parameter.



  • Wie definiert man in C optionale Parameter?

    Hier ein Minimalbeispiel:

    void nl(int i) {
        int j = 1;
        if (<i übergeben>)
            j = i;
        while (j--)
            printf("\n");
    }
    

    Wie teste ich ob ein Parameter übergeben wurde?

    Bzw. allgemein:

    Wie stell ich das mit dem optionalen Parameter an in C?

    nl(); und nl(1); sollen dasselbe sein.
    nl(123); usw. ist selbsterklärend...

    Wenn nix übergeben wird bei nl(); wird genau ein newline ausgegeben.

    Danke für die Antworten.



  • Default-Parameter gibts nicht in C.

    Du kannst höchstens (unsicher!) die Funktion so deklarieren, dass sie eine beliebige Parameterliste annimmt.

    void myfunc() /* leere! parameterliste, ist nicht dasselbe wie void myfunc(void) */
    {
        /* do whatever you want */
    }
    
    int main(void)
    {
        myfunc();
        myfunc("hallo");
        myfunc(123);
    }
    

    Ich würds dir aber nicht raten...



  • Ja toll,
    aber selbst, wenn ich mihc dafür entscheiden sollte...

    ... wie frag ich denn den ersten Parameter ab?

    myfunc("hallo");
    myfunc(123);

    usw.

    Wie greife ich innerhalb der myfunc() darauf zu???

    PS: Ausserdem wundert mich das total, dass das in C nicht geht. Das beeinschränkt die Mächtigkeit der Sprache um eine Dimension, oder net?



  • wie schon gesagt, default-Parameter gibt es in C nicht.

    DerGrosseC schrieb:

    PS: Ausserdem wundert mich das total, dass das in C nicht geht. Das beeinschränkt die Mächtigkeit der Sprache um eine Dimension, oder net?

    wieso denn das? Wieso soll es weniger "Mächtig" sein und dann sogar um eine ganze Dimension? Was stellst du dir unter Dimension vor? Wieso soll es mächtiger sein, dass ich nl() statt nl(1) schreiben darf? Wo liegt der Vorteil?

    Was du suchst ist man: stdarg (variable argument lists). Die Funktion muss aber mind. 1 festes Parameter haben.



  • supertux schrieb:

    Was du suchst ist man: stdarg (variable argument lists). Die Funktion muss aber mind. 1 festes Parameter haben.

    Ah. Das reicht mir schon fürs erste...



  • PS: Ich revidiere hiermit mein letztes PS.



  • supertux schrieb:

    Wieso soll es mächtiger sein, dass ich nl() statt nl(1) schreiben darf? Wo liegt der Vorteil?

    funktionsüberladung ist ja manchmal ganz brauchbar, aber default-parameter sind ein zweifelhaftes feature. die machen code nur schwerer lesbar.
    🙂



  • 😕

    Ist doch beides genau gleich zu lesen

    und beides ist nur ein nettes Gimmick und wirkt sich nicht auf die Funktionalität aus.



  • DerGrosseC schrieb:

    Wie definiert man in C optionale Parameter?

    Funktion aufteilen

    Hier ein Minimalbeispiel:

    void nl(int i) {
        int j = 1;
        if (<i übergeben>)
            j = i;
        while (j--)
            printf("\n");
    }
    
    void newlines (int i);
    
    void newline () {
        newlines(1);
    }
    


  • Das geht nur mit C++, in C kann man Funktionen nicht überladen.



  • ABER schrieb:

    Das geht nur mit C++, in C kann man Funktionen nicht überladen.

    💡

    ⚠ ⚠ ⚠ Sry mein Fehler, hab das 's' überlesen ⚠ ⚠ ⚠



  • Man könnte ja auch die Parameter vorher in ein dynamisches Array laden und die Adresse übergeben. Und gib am Besten die Länge des Arrays gleich mit, um hässliche Fehler zu vermeiden.


Anmelden zum Antworten