Compartilhar via


_ReturnAddress

Seção específica da Microsoft

O intrínseco _ReturnAddress fornece o endereço da instrução na função de chamada que será executada após o retorno do controle ao chamador.

Crie o programa a seguir e passe por ele no depurador. Ao percorrer o programa, observe o endereço retornado de _ReturnAddress. Em seguida, imediatamente após retornar da função em que _ReturnAddress foi usado, abra a janela Como usar a janela de 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 inlining podem afetar o endereço de retorno. Por exemplo, se o programa de exemplo abaixo for compilado com /Ob1, inline_func ele será embutido 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, a função que contém a chamada _ReturnAddress é compilada como uma função nativa. Quando uma função compilada como gerenciada chama a função que contém _ReturnAddress, _ReturnAddress pode não se comportar conforme o esperado.

Requisitos

Arquivo de cabeçalho<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;
}

Fim da seção específica da Microsoft

Confira também

_AddressOfReturnAddress
Compilador intrínsecos
Palavras-chave