Condividi tramite


Passaggio di argomenti e convenzioni di denominazione

Sezione specifica Microsoft

I compilatori di Visual C++ consentono di specificare le convenzioni per passare 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 estesi 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 codice di prologo e di epilogo della funzione, vedere le chiamate alle funzioni naked.

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

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

Inserito nello stack; questo puntatore è stato 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 le convenzioni di chiamata obsolete.

Fine sezione specifica Microsoft

Vedere anche

Riferimenti

Convenzioni di chiamata