MS Visual C ++: Wann sollten Sie Aufrufkonventionen verwenden?

8

In C / C ++ (speziell verwende ich MSVS), in welcher Situation müsste man sich jemals darum kümmern, eine Aufrufkonvention für eine Funktionsdefinition anzugeben? Sind sie jemals wichtig? Ist das nicht in der Lage, im Bedarfsfall die optimale Konvention zu wählen (zB Fastcall, etc.).

Vielleicht fehlt mir mein Verständnis, aber ich sehe einfach nicht, wenn es der Fall wäre, dass der Programmierer sich um Dinge wie die Reihenfolge, in der die Argumente auf den Stapel gelegt werden, und so weiter kümmern muss. Ich sehe auch nicht, warum die Optimierung des Compilers nicht in der Lage wäre, das Schema zu wählen, das für diese spezielle Funktion am besten funktioniert. Jegliches Wissen, das mir jemand bieten könnte, wäre großartig. Danke!

    
Russel 24.01.2011, 18:55
quelle

2 Antworten

10

Im Allgemeinen ist die Aufrufkonvention wichtig, wenn Sie Code integrieren, der von verschiedenen Compilern kompiliert wird. Wenn Sie beispielsweise eine DLL veröffentlichen, die von Ihren Kunden verwendet wird, sollten Sie sicherstellen, dass die von Ihnen exportierten Funktionen eine konsistente, erwartete Aufrufkonvention haben.

Sie haben Recht, dass der Compiler innerhalb eines einzelnen Programms im Allgemeinen auswählen kann, welche Aufrufkonvention für jede Funktion verwendet werden soll (und die Regeln sind normalerweise ziemlich einfach).

    
Greg Hewgill 24.01.2011 19:00
quelle
6

Sie müssen sich nicht um 64-Bit-Anwendungen kümmern, da es nur eine Aufrufkonvention gibt.

In den folgenden Fällen müssen Sie sich um 32-Bit-Anwendungen kümmern:

  • Sie interagieren mit Bibliotheken von Drittanbietern und die Header für diese Bibliotheken deklarierten nicht die richtige Aufrufkonvention.
  • Sie erstellen eine Bibliothek oder DLL für eine andere Person. Sie müssen sich für eine Aufrufkonvention entscheiden, damit anderer Code beim Aufruf Ihres Codes die richtige Aufrufkonvention verwendet.
John 24.01.2011 19:00
quelle

Tags und Links