__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, ...);