_ReturnAddress
Específicos de Microsoft
Función intrínseca de _ReturnAddress proporciona la dirección de la instrucción en la función de llamada que se ejecutará después de que el control vuelve al llamador.
Compile el programa y el paso siguientes a través de en el depurador. Como se recorre el programa, anote la dirección que se devuelve de _ReturnAddress. A continuación, inmediatamente después de cambiar de la función en la _ReturnAddress se utilizó, abra Cómo: Utilizar la ventana Desensamblador y observe que la dirección de la siguiente instrucción de ser coincidencias ejecutadas que la dirección devolvió de _ReturnAddress.
Optimizaciones tales como la pueden afectar al de. Por ejemplo, si el programa de ejemplo siguiente se compila con /Ob1, inline_func está alineada en la función que llama, main. Por tanto, las llamadas a _ReturnAddress de inline_func y a main se aplicará cada producen el mismo valor.
Cuando _ReturnAddress se utiliza en un programa compilado con /clr, la función que contiene la llamada de _ReturnAddress se compiló como función nativa. Cuando una función compilada como llamadas administradas en la función que contiene _ReturnAddress, _ReturnAddress no puede comportarse como se espera.
Requisitos
Archivo de encabezado <intrin.h>
Ejemplo
// 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;
}