Condividi tramite


__cdecl

Specifici di Microsoft

Si tratta della convenzione di chiamata predefinita per i programmi c e C++.Poiché lo stack vengano liberate dal chiamante, è possibile apportare vararg funzioni.__cdecl la convenzione di chiamata crea i maggiori eseguibili che __stdcall, poiché richiede ogni chiamata di funzione di includere il codice di pulizia dello stack.Nell'elenco riportato di seguito viene illustrata l'implementazione di questa convenzione di chiamata.

Elemento

Implementazione

Argomento-passaggio l'ordine

Da destra a sinistra

responsabilità di Stack-manutenzione

La funzione chiamante estrae gli argomenti dallo stack

Convenzione della decorazione dei nomi

Il carattere di sottolineatura (_) è preceduta i nomi, ad eccezione di quando si esporta il __cdecl viene eseguito il collegamento c di utilizzo.

Convenzione della conversione maiuscolo/minuscolo

Nessuna conversione maiuscolo/minuscolo eseguita

[!NOTA]

per informazioni correlate, vedere nomi decorati.

La famiglia di (IPF) processori Itanium e nei processori x64, __cdecl viene accettato e ignorato dal compilatore, sull'IPF, per convenzione, i parametri vengono passati nel registro.

posizionare il cdecl modificatore prima di una variabile o di un nome di funzione.Poiché i nomi e le convenzioni di chiamata c è l'impostazione predefinita, l'unica occasione è necessario utilizzare ilcdecl è quando è stata specificata l'opzione del compilatore /Gz (stdcall) o /Gr (fastcall)./Gd l'opzione del compilatore impone __cdecl convenzione di chiamata.

Per le funzioni di classe non statica, se la funzione è non inline definita, il modificatore della convenzione di chiamata non è necessario specificarlo nella definizione non inline.Ovvero per i metodi del membro non statico della classe, la convenzione di chiamata specificata durante la dichiarazione è nota al momento della definizione.Specificando questa definizione della classe,

struct CMyClass {
   void __cdecl mymethod();
};

this

void CMyClass::mymethod() { return; }

equivale a questo

void __cdecl CMyClass::mymethod() { return; }

Esempio

Nell'esempio seguente, il compilatore viene richiesto di utilizzare nomi e le convenzioni di chiamata c per system funzione:

// Example of the __cdecl keyword on function
int __cdecl system(const char *);
// Example of the __cdecl keyword on function pointer
typedef BOOL (__cdecl *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Vedere anche

Riferimenti

Passaggio e convenzioni di denominazione dell'argomento

Parole chiave C++