_ReturnAddress
Specyficzne dla firmy Microsoft
Funkcja wewnętrzna _ReturnAddress
udostępnia adres instrukcji w funkcji wywołującej, która zostanie wykonana po powrocie kontrolki do obiektu wywołującego.
Skompiluj następujący program i wykonaj czynności opisane w debugerze. Podczas przechodzenia przez program zanotuj adres zwracany z _ReturnAddress
adresu . Następnie natychmiast po powrocie z funkcji, w której _ReturnAddress
została użyta, otwórz okno Instrukcje: Użyj okna dezasemblacji i zwróć uwagę, że adres następnej instrukcji do wykonania jest zgodny z adresem zwróconym z _ReturnAddress
.
Optymalizacje, takie jak podkreślenie, mogą mieć wpływ na adres zwrotny. Jeśli na przykład poniższy przykładowy program zostanie skompilowany z /Ob1, inline_func
zostanie wstawiony do funkcji wywołującej , main
. W związku z tym wywołania metody _ReturnAddress
i inline_func
main
będą generować tę samą wartość.
Gdy _ReturnAddress
jest używany w programie skompilowanym z /clr, funkcja zawierająca _ReturnAddress
wywołanie zostanie skompilowana jako funkcja natywna. Gdy funkcja skompilowana jako zarządzane wywołania do funkcji zawierającej _ReturnAddress
element _ReturnAddress
może nie zachowywać się zgodnie z oczekiwaniami.
Wymagania
Plik<nagłówka intrin.h>
Przykład
// compiler_intrinsics__ReturnAddress.cpp
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(_ReturnAddress)
__declspec(noinline)
void noinline_func(void)
{
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
}
__forceinline
void inline_func(void)
{
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
}
int main(void)
{
noinline_func();
inline_func();
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
return 0;
}
END Microsoft Specific
Zobacz też
_AddressOfReturnAddress
Funkcje wewnętrzne kompilatora
Słowa kluczowe