_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 _ReturnAddress
der 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 _ReturnAddress
inline_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