Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Präprozessor

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.11.2003, 07:24 Uhr
(un)wissender
Niveauwart


Hallo, habe eine Frage zum Präprozessor.


C++:
#ifdef __GNUC__
#define fastcall(x) __attribute__((regparm(x)))
#elif
#define fastcall(x)  
#endif

//So werden Methoden definiert
class x {
void test(int i) fastcall(1);
};



Meine Frage ist jetzt, ob das dann auch funktioniert bei einem Compiler der nicht __GNUC__ definiert, da soll ja fastcall(1) durch nichts erstetzt werden (leerer Raum).

Danke
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.11.2003, 07:31 Uhr
Pablo
Supertux
(Operator)


Wenn ein Compiler (besser gesagt die .h Dateien) __GNUC__ nicht definiert, dann heißt es, es ist nicht gcc oder nicht komplett ANSI.Ich hab schon mal das gesehen, muss ehrlich sagen, ich hab keine Ahnung was das machen soll, vielleicht ist das ein gcc Feature. Jedenfalls, fastcall(x) wird immer definiert, wenn es kein gcc dann tut gar nix, damit der Compiler keine Fehlermeldung anzeigt, wenn fastcall(x) nicht definiert ist, und wenn der Compiler gcc dann führt die Anweisung __atribute..... aus. Ich hoffe ich habe keinen Mist gelabert, das wäre meine einzige Erklärung.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.11.2003, 07:38 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, das funktioniert auch mit einem Compiler, der nicht gcc ist. Böse wirds allein dann, wenn Du einen Compiler hast, der ebenfalls das Macro __GNUC__ definiert, aber nicht gcc ist. Dem einzigen, dem solche Bösartigkeiten zuzutrauen wären, wäre Bill G..

Das Oben gezeigte ist ein Gängiger Weg, bestimmte compilerspezifische Dinge ein/auszuschalten.
--
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
003
18.11.2003, 08:40 Uhr
ao

(Operator)



Zitat:
virtual postete
Böse wirds allein dann, wenn Du einen Compiler hast, der ebenfalls das Macro __GNUC__ definiert, aber nicht gcc ist. Dem einzigen, dem solche Bösartigkeiten zuzutrauen wären, wäre Bill G..


... wobei Bill sich dabei nur ins eigene Fleisch schneiden würde, denn wenn *sein* Compiler sich als was ausgibt, was er nicht ist, dann kriegt sein Support die aufgebrachten Anrufe, weil Quellcode, der auf anderen Compilern glatt durchläuft, mit Microsoft-Compilern auf einmal Fehlermeldungen produziert.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.11.2003, 17:25 Uhr
(un)wissender
Niveauwart


Danke euch allen, ich habe das Macro oben selbst geschriebn und wollte halt nur wissen ob fastcall(x) durch nichts ersetzt werden kann.

Wenn Bill __GNUC__ definieren würde, dann hätte das aus seiner Sicht den Vorteil, das GNU-Code nicht so recht funktionieren würde(was wieder an Bill liegen würde), man müsste/sollte also VC++ kaufen.

Microsoft macht oft solche Dinge, nur um ihre eigenen Produkte möglichst inkompatibel zu halten (klingt auf den erste Blick verrückt), aber das ist halt nur cleveres Marketing, was auf Kosten der Allgemeinheit geht.

Mal was anderes:
mit g++ funzt auch _fastcall void xx(int z);

Wo liegt der Unterschied zu __attribute__((regparm(x)))?

Es gibt einen, denn ich kenne:
_fastcall kann beim g++ nur 2 Register nutzen, regparm bis zu drei.(bei x86)
Außerdem funzt Code machmal mit _fastcall nicht, mit regparm schon.

Was also genau passiert hier?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: