_ReturnAddress
Sezione specifica Microsoft
L'oggetto _ReturnAddress
intrinseco fornisce l'indirizzo dell'istruzione nella funzione chiamante che verrà eseguita dopo il ritorno del controllo al chiamante.
Compilare il programma seguente ed eseguirlo nel debugger. Durante l'esecuzione del programma, prendere nota dell'indirizzo restituito da _ReturnAddress
. Quindi, subito dopo la restituzione dalla funzione in cui _ReturnAddress
è stato usato, aprire procedura : usare la finestra disassembly e notare che l'indirizzo dell'istruzione successiva da eseguire corrisponde all'indirizzo restituito da _ReturnAddress
.
Le ottimizzazioni, ad esempio l'inlining, possono influire sull'indirizzo restituito. Ad esempio, se il programma di esempio seguente viene compilato con /Ob1, inline_func
verrà inlined nella funzione chiamante , main
. Di conseguenza, le chiamate a _ReturnAddress
da inline_func
e main
produrranno lo stesso valore.
Quando _ReturnAddress
viene usato in un programma compilato con /clr, la funzione contenente la _ReturnAddress
chiamata verrà compilata come funzione nativa. Quando una funzione compilata come chiamate gestite nella funzione contenente _ReturnAddress
, _ReturnAddress
potrebbe non comportarsi come previsto.
Requisiti
<File di intestazione intrin.h>
Esempio
// 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;
}
Fine sezione specifica Microsoft
Vedi anche
_AddressOfReturnAddress
Intrinseci del compilatore
Parole chiave