Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Makros max und min

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.10.2003, 13:21 Uhr
Anfänger00



Was machen diese Makros ganz genau?
Ich muss das wissen um ein Beispiel besser verstehen zu können,
DANKE

Dieser Post wurde am 18.10.2003 um 13:21 Uhr von Anfänger00 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.10.2003, 03:27 Uhr
~Jemand
Gast


Hy!

Was meinst du?

#define min xxx
#define max xxx

(die xxx stehen für Zahlen)

oder was ?

Etwas mehr Text were nett!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.10.2003, 09:07 Uhr
virtual
Sexiest Bit alive
(Operator)


In der Regel machen diese Macros folgendes:

C++:
#define max(a,b) ((a)<(b)? (b):(a))
#define min(a,b)  ((a)<(b)? (a):(b))


Das hat verschiedene negative Auswirkungen, ich würde Dir daher - wenn Du die Möglichkeit hast - eher zu den C++ Templates min und max raten (Header algorithm). Zwei der wichtigsten negativen Nebenwirkungen sind:

C++:
int a = 4;
int b = 5;

int min = min(a++, b++);


Das mag zwar so schon schlechter stil sein, aber der unbefangene Beobachter mag denken, daß am Ende gilt:

C++:
a == 5
b == 6
min == 4


(So wäre es jedenfalls, wenn min eine Funktion wäre). Tatsächlich ist aber:

C++:
a == 6 // (!)
b == 6
min = 5


Dies liegt daran, daß a oder b zweimal ausgwertet werden (je nach dem, wer größer ist).
Häufoger findet man aber solche netten Fehler:

C++:
long ziemlich_langsam(char c)
{
   // Diese Routine is ziemlich langsam
   return ???;
}
...
long x = min(ziemlich_langsam('A'), ziemlich_langsam('B'));


Nur wird ziemlich_langsam dreimal aufgerufen. Das ist dann wirklich ziemlich Langsam!

Wenn Du mit diesen Makros arbeitest, solltest Du immer nur entweder Konstanten und einfache Variablen übergeben, niemals jedoch direkt den Rückgabewert einer Funktion odeer irgendwelche Ausdrücke, die einen Operator enthalten.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 20.10.2003 um 09:07 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.10.2003, 15:01 Uhr
Anfänger00



Was macht den der Operator ?
(5<6)? = 5
(5>6)? = 6

5?6 = 5<6;

Das vermute ich mal,aber ich habe keine Ahnung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.10.2003, 16:03 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
a = b?c:d


enstpricht:

C++:
if (b)
{
    a = c;
}else
{
    a = d;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.10.2003, 17:51 Uhr
Anfänger00



Aber if(b) macht doch keinen Sinn,oder meinst du:

C++:
a =b?c:d =
if(a=b)
...



Ich hab da noch ne Frage:
Was ist eigentlich NUMLINES ?
Ich kanns mir zwar denken,aber ich bin mir nicht sicher,woher das System weiß,wie viele Zeilen es gibt,da ja die Textgröße auch variieren kann,mhhm..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.10.2003, 18:07 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich kenn kein "NUMLINES".
Was das IF angeht: warum sollte "if(b)" keinen sinn machen?
Ich übersetze es mal:

C++:
if (b)
{
    a = c;
}else
{
    a = d;
}


Wenn b nicht 0 ist, dann weise a den Wert von c zu. Wenn b 0 ist, dann weise a den Wert von d zu.

Was du geschrieben hast kann ich nicht nachvollziehen (ein Compiler wohl auch nicht). Allerdings sei Darauf hingewiesen, daß

C++:
if (a=b) ...


Übersetzt heißt: weise a den Wert von b zu und wenn danach a nicht 0 ist, dann mache ....
Das ist in den seltensten Fällen das, was man will.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 30.10.2003 um 18:07 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.10.2003, 20:01 Uhr
Anfänger00



Tja,ich dachte if(b) heist einfach: wenn b dann tue das
Woher soll ich das auch wissen,dass das dasselbe wie
if(b!=0) ?
Ich kenne es ja auch nicht,aber ich finde im qellcode (aus DEM Petzold)
einfach keine Deklaration von NUMLINES und dachte es hadelt sich um irgendein Makro...

Dieser Post wurde am 30.10.2003 um 20:01 Uhr von Anfänger00 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.10.2003, 20:22 Uhr
Pablo
Supertux
(Operator)


Vielleicht ist eine Konstante aus einer selbst geschriebene Header Datei de Form
#define NUMLINES 4096 oder so.

In C und C++ sind Ausdrücke !=0 gleich wie true, Ausdrücke gleich 0 sind false. b alleine ist ein Ausdruck, der den Wert der Variable b zurückgibt. Deshalb funktioniert es.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.10.2003, 20:42 Uhr
Anfänger00



Aha das wusste ich garnicht.
Ach ja richtig,das steht tasächlich in nem header und das ist die Anzahl der Zeilen an Hand von GetSystemMetrics(..) ermittelt..
(oder so ähnlich,hab nur kurz reingeschaut )

Dieser Post wurde am 30.10.2003 um 20:45 Uhr von Anfänger00 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: