_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 _ReturnAddressadresu . 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_funcmain 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 _ReturnAddresselement _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