_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