Passaggio di argomenti e convenzioni di denominazione

Sezione specifica Microsoft

I compilatori Microsoft C++ consentono di specificare convenzioni per il passaggio di argomenti e valori restituiti tra funzioni e chiamanti. Non tutte le convenzioni sono disponibili in tutte le piattaforme supportate e alcune convenzioni utilizzano implementazioni specifiche della piattaforma. Nella maggior parte dei casi, le parole chiave o le opzioni del compilatore che specificano una convenzione non supportata su una determinata piattaforma vengono ignorate e viene utilizzata la convenzione predefinita della piattaforma.

Nelle piattaforme x86, tutti gli argomenti vengono ampliati a 32 bit quando vengono passati. I valori restituiti vengono estesi anche a 32 bit e vengono restituiti nel registro EAX, eccetto le strutture a 8 byte, che vengono restituite nella coppia di registri EDX:EAX. Le strutture di dimensioni maggiori vengono restituite nel registro EAX come puntatori alle strutture di ritorno nascoste. I parametri vengono inseriti nello stack da destra a sinistra. Le strutture che non sono POD non verranno restituite nei registri.

Il compilatore genera un codice di epilogo e di prologo per salvare e ripristinare i registri ESI, EDI, EBX e EBP, se sono utilizzati nella funzione.

Nota

Quando uno struct, un'unione o una classe vengono restituiti da una funzione per valore, tutte le definizioni del tipo devono essere uguali, altrimenti il programma può avere esito negativo in fase di esecuzione.

Per informazioni su come definire il prologo e l'epilogo della funzione personalizzati, vedere Chiamate a funzioni naked.

Per informazioni sulle convenzioni di chiamata predefinite nel codice destinato alle piattaforme x64, vedere x64 Calling Convention. Per informazioni sui problemi relativi alle convenzioni di chiamata nel codice destinato alle piattaforme ARM, vedere Problemi comuni di migrazione arm di Visual C++.

Le seguenti convenzioni di chiamata sono supportate dal compilatore Visual C/C++.

Parola chiave Pulizia dello stack Passaggio dei parametri
__cdecl Chiamante Inserisce i parametri nello stack in ordine inverso (da destra a sinistra)
__clrcall n/d Carica in ordine i parametri nello stack dell'espressione CLR (da sinistra a destra).
__stdcall Chiamato Inserisce i parametri nello stack in ordine inverso (da destra a sinistra)
__fastcall Chiamato Archiviati nei registri, quindi inseriti nello stack
__thiscall Chiamato Spinto sullo stack; this puntatore archiviato in ECX
__vectorcall Chiamato Archiviato nei registri, quindi sottoposto a push nello stack in ordine inverso (da destra a sinistra)

Per informazioni correlate, vedere Convenzioni di chiamata obsolete.

Fine sezione specifica Microsoft

Vedi anche

Convenzioni di chiamata