_ReturnAddress
Konkrétní společnosti Microsoft
_ReturnAddress Vnitřní poskytuje adresu instrukce volání funkce, která bude provedena po ovládací prvek se vrátí k volajícímu.
Vytvořte následující program a krokovat v debuggeru.Program krocích, poznamenejte si adresu vrácená z _ReturnAddress.Poté ihned po návratu z funkce kde _ReturnAddress byla použité, Otevřít Postupy: Použití okna zpětného překladu a Všimněte si, že adresy mají být provedeny další instrukce odpovídá adrese vrátil z _ReturnAddress.
Optimalizace například inlining může mít vliv na zpáteční adresu.Například následující ukázkový program je kompilována s /Ob1, inline_func bude inlined do volání funkce main.Proto volání na _ReturnAddress z inline_func a main ohlásí každou stejnou hodnotu.
Při _ReturnAddress je používán program zkompilován s /clr, obsahující funkce _ReturnAddress volání bude zpracován jako nativní funkce.Při funkci zkompilován jako spravované volání do funkce obsahující _ReturnAddress, _ReturnAddress mohou chovat dle očekávání.
Požadavky
Záhlaví souboru <intrin.h>
Příklad
// 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;
}