Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Codestück

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 ] > 2 < [ 3 ]
010
23.08.2007, 17:50 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
if (++pTotal[j]) {
   ++pMap[j][ng];
   if (pMap[j][ng] > pMax[j])  pMax[j] = pMap[j][ng];
}


Besser natürlich gleich:

C++:
if (++pTotal[j]) {
   pMax[j] = max(++pMap[j][ng], pMax[j]);
}



--
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
011
23.08.2007, 20:29 Uhr
banshee



danke, das mit dem max ist eine sehr gute Idee :>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.08.2007, 00:38 Uhr
banshee



Eine Frage habe ich doch nochmal. Die erste if-Abfrage müsste man sich doch sparen können, da pTotal wie gesagt komplett auf 0 initialisiert wird und durch den ++-Operator ja mindestens 1 ist und deshalb immer true rauskommt oder nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
24.08.2007, 09:38 Uhr
virtual
Sexiest Bit alive
(Operator)


Das kann ich aus dem Codestück nicht schliessen. Wenn Du Dir super duper sicher bist, daß die Bedingung wirklich immer true ist, dann kannst Du natürlich das if auch fortlassen, allerdings musst Du nach wie vor natürlich pTotal[j] hochzählen, also:

C++:
++pTotal[j];
pMax[j] = max(++pMap[j][ng], pMax[j]);


--
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
014
24.08.2007, 09:57 Uhr
Tommix



Hallo,
nur als ergänzende Warnung, unter Windows gibt es ein Präprozessor-Makro max:

Zitat von windef.h:

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



das für Virtuals Vorschlag denkbar ungeeignet ist.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
24.08.2007, 11:25 Uhr
(un)wissender
Niveauwart


Makros sind böse, ich aber bin böser.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
24.08.2007, 13:59 Uhr
Pablo
Supertux
(Operator)


ja, du bist böser aber wieso ist die allgemeine Meinung, dass Makros böse sind und dass man sie vermeiden sollte? Vielleicht liegt es daran, dass ich nur ein C Programmierer bin, aber ich finde, dass Makros ganz schön Tipparbeit sparen können, vor allem in C.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
24.08.2007, 14:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Pablo:
ja, du bist böser aber wieso ist die allgemeine Meinung, dass Makros böse sind und dass man sie vermeiden sollte? Vielleicht liegt es daran, dass ich nur ein C Programmierer bin, aber ich finde, dass Makros ganz schön Tipparbeit sparen können, vor allem in C.

Hi,
naja wenn man nicht weiß wie Makros korrekt verwendet werden, sind sie böse. Und in C++ gibts eigentlich (im normalfall) bessere Möglichkeiten als Makros. In C kann ich sie mir jedoch auch nicht wegdenken.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
24.08.2007, 14:45 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Pablo:
ja, du bist böser aber wieso ist die allgemeine Meinung, dass Makros böse sind und dass man sie vermeiden sollte? Vielleicht liegt es daran, dass ich nur ein C Programmierer bin, aber ich finde, dass Makros ganz schön Tipparbeit sparen können, vor allem in C.



Tommix Beispiel ist ja grade ein Standardbeispiel für die Nachteile von Macros:

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

int i = 4;
int j = max(++i, 3); // Ups: i ist ja 6, also um zwei größer
int k = max(++i, 10) // Hm: i ist nun 7, also um eins größer



Dh da Du prinzipiell bei Macros nicht weisst, wie oft die parameter im Macrotext vorkommen und nicht wissen kannst, wie häufig sie tatsächlich ausgewertet werden, kannst Du auch nicht wissen, wie häufig Nebeneffekte ausgewertet werden.

Ein weitere Mankos (grade im Vergleich zu Templates in der C++ welt) sind fehlende Typisierung [ z.B. max("a", "b") ] und fehlende Typsicherheit.
--
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
019
24.08.2007, 14:50 Uhr
Tommix



Ich hätte gedacht, obiges max-Makro zeigt die Problematik:

C++:
int x = 1;
int y = 2;
int z = max (x++, y++);


Danach ist x = 2, y = 4 (sic!) und z = 3. Wäre max eine Funktion, käme was anderes heraus.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


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: