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.BCalc(((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?