Compartir a través de


_ReturnAddress

Específicos de Microsoft

El intrínseco _ReturnAddress proporciona la dirección de la instrucción en la función de llamada que se ejecutará después de que el control se devuelva al autor de llamada.

Compile el programa siguiente y examínelo en el depurador. Cuando revise el programa, observe la dirección que se devuelve de _ReturnAddress. Luego, inmediatamente después de volver de la función en la que se usó _ReturnAddress, abra el artículo sobre cómo usar la ventana Desensamblado y observe que la dirección de la instrucción siguiente que se va a ejecutar coincide con la dirección devuelta de _ReturnAddress.

Optimizaciones como la inserción pueden afectar la dirección de devolución. Por ejemplo, si el programa de ejemplo siguiente se compila con /Ob1, inline_func se insertará en la función de llamada, main. Por lo tanto, cada una de las llamadas a _ReturnAddress desde inline_func y main generará el mismo valor.

Al usar _ReturnAddress En un programa compilado con /clr, la función que contiene la llamada _ReturnAddress se compilará como una función nativa. Cuando una función compilada como administrada llama a la función que contiene _ReturnAddress, es posible que _ReturnAddress no se comporte según lo previsto.

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;
}

FIN de Específicos de Microsoft

Consulte también

_AddressOfReturnAddress
Intrínsecos del compilador
Palabras clave