_ReturnAddress
Specifické pro Microsoft
Vnitřní _ReturnAddress
poskytuje adresu instrukce ve volající funkci, která se spustí po návratu ovládacího prvku volajícímu.
Sestavte následující program a projděte ho v ladicím programu. Při procházení programu si poznamenejte adresu vrácenou z _ReturnAddress
programu . Pak ihned po návratu z funkce, kde _ReturnAddress
byl použit, otevřete How to: Use the Disassembly Window a všimněte si, že adresa další instrukce, která se má provést, odpovídá adrese vrácené z _ReturnAddress
.
Optimalizace, jako je vkládání, můžou ovlivnit návratovou adresu. Pokud je například níže uvedený ukázkový program zkompilován s /Ob1, inline_func
bude vložen do volající funkce, main
. Proto volání _ReturnAddress
z inline_func
a main
každý z nich vytvoří stejnou hodnotu.
Pokud _ReturnAddress
se používá v programu kompilovaném pomocí /clr, funkce obsahující _ReturnAddress
volání bude zkompilována jako nativní funkce. Pokud se funkce zkompilovala jako spravovaná volání do funkce obsahující _ReturnAddress
, _ReturnAddress
nemusí se chovat podle očekávání.
Požadavky
Hlavičkový soubor<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;
}
END Microsoft Specific
Viz také
_AddressOfReturnAddress
Vnitřní funkce kompilátoru
Klíčová slova