Udostępnij za pośrednictwem


Przekazywanie argumentów i konwencje nazewnictwa

Specyficzne dla firmy Microsoft

Kompilatory języka Visual C++ umożliwiają określanie konwencje dotyczących przekazywania argumentów i zwracanie wartości między funkcjami a obiektami wywołującymi.Nie wszystkie konwencje są dostępne na wszystkich obsługiwanych platformach, a niektóre konwencje używają implementacji specyficznych dla platform.W większości przypadków słowa kluczowe lub przełączniki kompilatora, które określają nieobsługiwaną konwencję na konkretnej platformie, są ignorowane, a domyślna konwencja platformy jest używana.

Na platformach x86 wszystkie argumenty po przekazaniu zostają rozszerzone do 32 bitów.Wartości zwracane są także rozszerzane do 32 bitów i zwracane w rejestrze EAX, z wyjątkiem struktur 8-bajtowych, które są zwracane w parze rejestrów EDX:EAX.Większe struktury są zwracane w rejestrze EAX jako wskaźniki ukrytej struktury zwrotu.Parametry są wypychane na stosie od prawej do lewej.Struktury inne niż POD nie są zwracane w rejestrach.

Kompilator generuje kod prologu i epilogu na potrzeby zapisywania i przywracania rejestrów ESI, EDI, EBX i EBP, jeśli są one używane w funkcji.

[!UWAGA]

Kiedy struktura, unia lub klasa jest zwracana przez funkcję według wartości, wszystkie definicje tego typu muszą być takie same, w przeciwnym razie program może ulec awarii w czasie wykonywania.

Aby uzyskać informacje dotyczące sposobu definiowania własnego kodu prologu i epilogu funkcji, zobacz Wywołania funkcji bez dodatków.

Aby uzyskać informacje o domyślnych konwencjach wywoływania w kodzie, który jest przeznaczony dla platform x64, zobacz Omówienie x 64 konwencji wywołania.Aby uzyskać informacje o problemach z konwencją wywoływania w kodzie, który jest przeznaczony dla platform ARM, zobacz Typowe problemy przy migracji Visual C++ ARM.

Kompilator języka Visual C/C++ obsługuje poniższe konwencje wywoływania.

Słowo kluczowe

Oczyszczanie stosu

Przekazywanie parametrów

__cdecl

Obiekt wywołujący

Przesuwa parametry w stosie, w odwrotnej kolejności (od prawej do lewej)

__clrcall

Nie dotyczy

Obciążenie parametrów na stosie wyrażenia CLR w kolejności (od lewej do prawej).

__stdcall

Wywoływany

Przesuwa parametry w stosie, w odwrotnej kolejności (od prawej do lewej)

__fastcall

Wywoływany

Przechowywane w rejestrach, następnie wypychane na stos

__thiscall

Wywoływany

Przesunięty na stosie; to wskaźnika przechowywania w ECX

__vectorcall

Wywoływany

Przechowywane w rejestrach, następnie wypychane na stos w odwrotnej kolejności (od prawej do lewej)

Aby uzyskać pokrewne informacje, zobacz Przestarzałe konwencje wywoływania.

KONIEC informacji specyficznych dla firmy Microsoft

Zobacz też

Informacje

Konwencje wywoływania