_ReturnAddress

Microsoft-spezifisch

Das _ReturnAddress systeminterne Element stellt die Adresse der Anweisung in der aufrufenden Funktion bereit, die ausgeführt wird, nachdem das Steuerelement an den Aufrufer zurückgegeben wird.

Erstellen Sie das folgende Programm, und durchlaufen Sie es im Debugger. Beachten Sie beim Durchlaufen des Programms die Adresse, von _ReturnAddressder sie zurückgegeben wird. Öffnen Sie dann unmittelbar nach der Rückgabe von der Funktion _ReturnAddress , von der sie verwendet wurde, das How to: Use the Disassembly Window , and note that the address of the next instruction to be executed matches the address returned from _ReturnAddress.

Optimierungen wie z. B. Die Einstreichung kann sich auf die Absenderadresse auswirken. Wenn das folgende Beispielprogramm z. B. mit /Ob1 kompiliert wird, inline_func wird er in die aufrufende Funktion eingebunden. main Daher erzeugen die Aufrufe von _ReturnAddressinline_func und von denen main jeder denselben Wert.

Wenn _ReturnAddress sie in einem Programm verwendet wird, das mit "/clr" kompiliert wurde, wird die Funktion, die den _ReturnAddress Aufruf enthält, als systemeigene Funktion kompiliert. Wenn eine Funktion als verwaltete Aufrufe in die Funktion kompiliert wird, die enthält _ReturnAddress, _ReturnAddress verhält sich dies möglicherweise nicht wie erwartet.

Anforderungen

Headerdatei<intrin.h>

Beispiel

// 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;
}

Ende Microsoft-spezifisch

Siehe auch

_AddressOfReturnAddress
Systeminterne Compiler
Schlüsselwörter