__cdecl
Programu Microsoft
Jest to wartość domyślna konwencji wywoływania dla programów c i C++.Ponieważ stos jest czyszczona przez rozmówcę, można zrobić vararg funkcji.__cdecl Konwencji wywoływania tworzy większe pliki wykonywalne niż __stdcall, ponieważ wymaga on zawierać kod porządkujący stosu każdego wywołania funkcji.Na poniższej liście przedstawiono wdrażania niniejszej konwencji wywoływania.
Element |
Wdrożenie |
---|---|
Kolejność przekazywania argumentu |
Od prawej do lewej |
Odpowiedzialność za utrzymanie stosu |
Wywołanie funkcji POP argumenty ze stosu |
Przekręcenie nazwy Konwencji |
Znak podkreślenia (_) jest prefiksem nazwy, z wyjątkiem podczas eksportowania __cdecl funkcje tego powiązania c użycia. |
Tłumaczenie przypadku Konwencji |
Nie tłumaczenia sprawa |
[!UWAGA]
Aby uzyskać pokrewne informacje, zobacz Nazwy zdobione.
W systemach z rodziny procesor Itanium (IPF) i procesorów x 64 __cdecl jest akceptowane i ignorowane przez kompilator; na IPF przez Konwencję, parametry są przekazywane w rejestrze.
Umieścić __cdecl modyfikator przed zmiennej lub nazwę funkcji.Ponieważ c nazewnictwa i konwencje wywoływania są domyślnie, tylko wtedy należy użyć __cdecl jest, gdy określono opcję kompilatora się przełączników /Gr (fastcall) lub /Gz (stdcall)./Gd sił opcji kompilatora __cdecl konwencji wywoływania.
Funkcje klasy-statycznej Jeśli funkcja jest zdefiniowane poza wiersza, modyfikator konwencji wywoływania nie muszą zostać określone w definicji wiersza.Oznacza to, że dla metod niestatycznego członka klasy, konwencja wywołania określonej podczas deklaracji zakłada się w punkcie uderzenia definicji.Biorąc pod uwagę niniejszej definicji klasy
struct CMyClass {
void __cdecl mymethod();
};
to
void CMyClass::mymethod() { return; }
jest to równoważne
void __cdecl CMyClass::mymethod() { return; }
Przykład
W poniższym przykładzie kompilator jest zalecane jest używanie c nazewnictwa i konwencji wywoływania system funkcji:
// 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, ...);