Sdílet prostřednictvím


_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 _ReturnAddressprogramu . 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