Was bedeutet diese Zeile?



  • #define def2(a,b) ((a) >= (b) ? (a):(b))
    


  • Das Macro gibt einfach den Größeren der beide Werte zurück.
    Ein besserer Name dafür wäre wohl MAX(a,b) dann versteht jeder was gemeint ist.



  • Es scheint sehr wichtig zu sein das def2(a,b) so schnell wie möglich ist. Deshalb wird def2() nicht als Funktion implementiert sondern als Makro.
    Ich weiss nicht ob inline in ANSI-C existiert oder nur in C++, wenn doch denke ich, wäre es so vielleicht etwas schöner:

    inline int def2(int a, int b)
    {
        return ((a) >= (b) ? (a):(b));
    }
    


  • Ok und was machst du bei folgendem Aufruf def2(3.4,6.8)?
    Die einzig äquivalente Möglichkeit zu Macros sind inline Templates,
    und die gibts nur in C++. Um vllt nochmal auf die Frage zurückzukommen:
    (Bedingung)?WennJa:WennNein;
    Sowas nennt man einen ternären Operator, dieser macht eigentlich genau
    das Gleiche wie eine if-Verzweigung nur eben als Operator, dadurch eignet
    er sich eben auch bei verschachtelten Aufrufen wie z.B

    Calc(((a>=b)?a:b));
    //wäre daselbe wie
    if(a>=b)
       Calc(a);
    else
       Calc(b);
    


  • Modorotor schrieb:

    Ich weiss nicht ob inline in ANSI-C existiert oder nur in C++, wenn doch denke ich, wäre es so vielleicht etwas schöner:

    inline int def2(int a, int b)
    {
        return ((a) >= (b) ? (a):(b));
    }
    

    inline hat nichts mit inlining zu tun. inlining heisst nur, dass man die funktionsdefinition in einen header packen kann.
    Aber zu MAX() gibt es etwas sehr interessantes von Alexandrescu: http://www.ddj.com/cpp/184403774



  • Danke für die zahlreichen Antworten



  • Shade Of Mine schrieb:

    inline hat nichts mit inlining zu tun.

    Doch!-Der Compiler darf eine Inline-Funktion an die Stelle des Funktionsaufrufes expandieren, also ein Makro daraus "basteln", er muss aber nicht.

    P.S.: Verwechselst du extern mit inline?


Anmelden zum Antworten