?
[quote="merchant"]
#define F2(a, b)((a)<(b) ? (a):(b))
Ich glaube Dein Problem ist, dass Du neben der eigentlichen Makrodefinition den "bedingten Ausdruck" nicht erkennst. Ein bedingter Ausdruck ist ein Konstrukt, dass wie folgt aussieht:
if(a > b)
z=a;
else
z=b;
und in der folgenden Form abgekürzt werden kann:
z = (a < b) ? a : b;
Umgangssprachlich heisst das, dass wenn der Ausdruck (a < b) wahr ist, dann wird a zurückgegeben, ansonsten b.
Bedingte Ausdrücke sind ein Erbe der Programmierspache C und finden auch in C++ anwendung.
Dein spezielles Makro entspricht in C++ -wie von _matze bereit erwähnt- der Funktion im namespace std:
z = min(a,b);
Es ist zwar richtig, dass Dravere schreibt, dass Deine Markos keinen Rückgabetyp besitzen, aber das soll nicht heissen, dass Du das Makro nicht auf die rechte Seite einer Zuweisung setzen kannst, da der Ausdruck einen Wert hat, den Du einer Variable zuwesien kannst. Das sieht dann so aus:
int a = 5;
int b = 6;
int z = 0;
z = F2(a,b); // z ist jetzt 5
Warum die Klammern im Makro so gesetzt sind kannst Du in jeder guten Einführung über den C Präprozessor nachlesen. Wohlgemerkt C, da man in C++ versucht den Präprozessor mit seinen Schwächen zu vermeiden.
Gruß,
B!