Passage des arguments et conventions de dénomination

Section spécifique à Microsoft

Les compilateurs Microsoft C++ vous permettent de spécifier des conventions pour passer des arguments et retourner des valeurs entre les fonctions et les appelants. Les conventions ne sont pas toutes disponibles sur toutes les plateformes prises en charge et certaines conventions utilisent des implémentations spécifiques à la plateforme. Dans la plupart des cas, les mots clés ou les commutateurs de compilation qui spécifient une convention non prise en charge sur une plateforme spécifique sont ignorés et la convention par défaut de la plateforme est utilisée.

Sur les plateformes x86, tous les arguments sont étendus à 32 bits lorsqu’ils sont passés. Les valeurs de retour sont également élargies à 32 bits et retournées dans le registre EAX, sauf pour les structures de 8 octets, qui sont retournées dans la paire de registres EDX:EAX. Les structures plus grandes sont retournées dans le registre EAX comme pointeurs vers des structures de retour masquées. Les paramètres font l'objet d'un push sur la pile de droite à gauche. Les structures qui ne sont pas des POD ne sont pas retournées dans les registres.

Le compilateur génère du code de prologue et d'épilogue pour enregistrer et restaurer les registres ESI, EDI, EBX et EBP, s'ils sont utilisés dans la fonction.

Remarque

Lorsqu'un struct, une union ou une classe est retourné(e) à partir d'une fonction par valeur, toutes les définitions du type doivent être identiques, sinon le programme peut échouer au moment de l'exécution.

Pour plus d’informations sur la façon de définir votre propre prolog de fonction et votre code d’épilogue, consultez Appels de fonction nus.

Pour plus d’informations sur les conventions d’appel par défaut dans le code qui cible les plateformes x64, consultez convention d’appel x64. Pour plus d’informations sur les problèmes de convention d’appel dans le code qui cible les plateformes ARM, consultez Problèmes courants de migration ARM Visual C++.

Les conventions d'appel suivantes sont prises en charge par le compilateur Visual C/C++.

Mot clé Nettoyage de pile Passage de paramètres
__cdecl Appelant Effectue un push des paramètres sur la pile, dans l'ordre inverse (de droite à gauche)
__clrcall n/a Charger les paramètres sur la pile d'expression CLR dans l'ordre (de gauche à droite).
__stdcall Appelé Effectue un push des paramètres sur la pile, dans l'ordre inverse (de droite à gauche)
__fastcall Appelé Stocké dans les registres, puis fait l'objet d'un push sur la pile
__thiscall Appelé Poussée sur la pile ; this pointeur stocké dans ECX
__vectorcall Appelé Stocké dans les registres, puis fait l'objet d'un push sur la pile dans l'ordre inverse (de droite à gauche)

Pour plus d’informations, consultez Conventions d’appel obsolètes.

FIN de la section spécifique à Microsoft

Voir aussi

Conventions d’appel