_ReturnAddress
9/7/2007
This function provides the return address of the instruction in the calling function that will be executed after control returns to the caller.
Syntax
void _ReturnAddress(void);
Parameters
None.
Return Value
None.
Remarks
Build the program in the Example section, and step through it in the debugger.
As you step through the program, note the address that is returned from _ReturnAddress.
Then, immediately after returning from the function where _ReturnAddress was used, open the Disassembly window and note that the address of the next instruction to be executed matches the address returned from _ReturnAddress.
Optimizations such as inlining can affect the return address.
For example, if the following sample program is compiled with /Ob (Inline Function Expansion) with n=1, inline_func is inlined into the calling function, main. Therefore, the calls to _ReturnAddress from inline_func and main each produce the same value.
Example
// compiler_intrinsics__ReturnAddress.cpp
#include <stdio.h>
// _ReturnAddress should be prototyped before use
#ifdef __cplusplus
extern "C"
#endif
void * _ReturnAddress(void);
#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;
}
Requirements
Routine | Required header | Architecture |
---|---|---|
_ReturnAddress |
<cmnintrin.h> |
x86, ARM, SH-4, MIPS |