_ReturnAddress

Microsoft 专用

_ReturnAddress 内部函数提供调用函数中指令的地址,该函数将在控制权返回给调用者后执行。

生成以下程序并在调试器中逐步完成。 在逐步执行程序时,请注意从 _ReturnAddress 中返回的地址。 然后,在从使用 _ReturnAddress 的函数返回后立即打开如何:使用反汇编窗口,并注意要执行的下一条指令的地址与从 _ReturnAddress 返回的地址匹配。

内联等优化可能会影响返回地址。 例如,如果下面的示例程序使用 /Ob1 编译,inline_func 便会内联到调用函数 main 中。 因此,从 inline_funcmain_ReturnAddress 的调用将各自产生相同的值。

在使用 /clr 编译的程序中使用 _ReturnAddress 时,包含 _ReturnAddress 调用的函数将编译为本机函数。 当按托管方式编译的函数调用包含 _ReturnAddress 的函数时,_ReturnAddress 可能无法按预期方式运行。

要求

头文件<intrin.h>

示例

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

结束 Microsoft 专用

另请参阅

_AddressOfReturnAddress
编译器内部函数
关键字