_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

See Also

Other Resources

Intrinsic Functions for Device Compilers