_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