Ich weiß, ich bin etwas spät dran, aber wenn jemand von Ihnen darüber stolpert, denken Sie daran, dass Sie ein Makro definieren können, das dies nachahmt. Zum Beispiel:
#if defined(__GNUC__)
#define MSFASTCALL __fastcall
#define GCCFASTCALL
#elif defined(_MSC_VER)
#define MSFASTCALL
#define GCCFASTCALL __attribute__((fastcall))
#endif
int MSFASTCALL magic() GCCFASTCALL;
Das sieht natürlich ziemlich hässlich aus, also könnte man einfach 2 Prototypen definieren (was ich auch tue), um es etwas übersichtlicher zu machen, aber es gibt Leute, die den Weg bevorzugen, der weniger Tipparbeit erfordert. Ich verwende im Allgemeinen keine Aufrufkonventionen, außer in besonderen Fällen. Den Rest überlasse ich dem Compiler zur Optimierung.
Nun gibt es einige Besonderheiten zu beachten. Wenn Sie zum Beispiel auf 64-Bit-Plattformen arbeiten, verwenden alle Funktionen die Fastcall-Konvention, um die Vorteile der zusätzlichen Register zu nutzen, die Geschwindigkeit zu erhöhen und die Kosten für die Umleitung zu reduzieren. Ebenso wird Fastcall von verschiedenen Plattformen unterschiedlich implementiert, da es nicht standardisiert ist. Es gibt noch einige andere, aber das ist alles, was ich aus dem Kopf ziehen kann.
1 Stimmen
Beachten Sie, dass es so etwas wie "die" Fastcall-Aufrufkonvention eigentlich nicht gibt. Was Sie beschrieben haben, entspricht dem, was C++ Builder als Fastcall bezeichnet. Visual C++ scheint die ungerade aus in diesem Fall, für was es wert ist.