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 |
---|---|---|
Obiekt wywołujący |
Przesuwa parametry w stosie, w odwrotnej kolejności (od prawej do lewej) |
|
Nie dotyczy |
Obciążenie parametrów na stosie wyrażenia CLR w kolejności (od lewej do prawej). |
|
Wywoływany |
Przesuwa parametry w stosie, w odwrotnej kolejności (od prawej do lewej) |
|
Wywoływany |
Przechowywane w rejestrach, następnie wypychane na stos |
|
Wywoływany |
Przesunięty na stosie; to wskaźnika przechowywania w ECX |
|
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