Freigeben über


_ReturnAddress

Microsoft-spezifisch

Die _ReturnAddress systeminterne Funktion stellt die Adresse der Anweisung in der aufrufenden Funktion, die ausgeführt wird, nachdem die Steuerung an den Aufrufer zurückkehrt.

Erstellen Sie das folgende Programm und den Schritt durch sie im Debugger. Wie Sie durch das Programm schrittweise ausführen, beachten Sie die Adresse, die von _ReturnAddress zurückgegeben wurde. Dann direkt nach der Rückgabe der Funktion, in der _ReturnAddress verwendet wurde, öffnen Sie Gewusst wie: Verwenden des Fensters "Disassembly", und beachten Sie, dass die Adresse der nächsten Anweisung ausgeführte Übereinstimmungen zu kommunizieren, die die Adresse von _ReturnAddress zurückgibt.

Optimierungen wie das Inlining beeinflussen möglicherweise die Rückgabeadresse. Wenn z. B. das folgende Beispielprogramm mit /Ob1 kompiliert wird, ist inline_func in die aufrufende Funktion inline main. Daher sind die Aufrufe _ReturnAddress von inline_func und main jedes Erzeugnis der gleiche Wert.

Wenn _ReturnAddress in einem Programm verwendet wird, die mit /clr kompiliert wird, wird die Funktion, die den _ReturnAddress Aufruf enthält, als systemeigene Funktion kompiliert. Wenn eine Funktion, die als verwaltete Aufrufe in die Funktion enthält _ReturnAddress kompiliert wird, _ReturnAddress sich nicht wie erwartet verhält.

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

Siehe auch

Referenz

_AddressOfReturnAddress

Intrinsische Compilerfunktionen

C++-Schlüsselwörter