_ReturnAddress

Específico da Microsoft

O _ReturnAddress intrínseco fornece o endereço da instrução na função de chamada que será executada depois que o controle retornar ao chamador.

Crie o programa a seguir e o depure. Ao passar pelo programa, observe o endereço retornado de _ReturnAddress. Em seguida, _ReturnAddress imediatamente após retornar da função em que foi usado, abra a janela Como usar a desmontagem e observe que o endereço da próxima instrução a ser executada corresponde ao endereço retornado de _ReturnAddress.

Otimizações como emlining podem afetar o endereço de retorno. Por exemplo, se o programa de exemplo abaixo for compilado com /Ob1, inline_func será inlinado na função de chamada, main. Portanto, as chamadas para _ReturnAddress de inline_func e main produzirão o mesmo valor.

Quando _ReturnAddress é usado em um programa compilado com /clr, _ReturnAddress a função que contém a chamada será compilada como uma função nativa. Quando uma função compilada como chamadas gerenciadas para a função que contém _ReturnAddress, _ReturnAddress pode não se comportar conforme o esperado.

Requisitos

Arquivo de header< intrin.h>

Exemplo

// 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 Específico da Microsoft

Confira também

_AddressOfReturnAddress
Intrínsecos do compilador
Palavras-chave