Microsoft 专用
_ReturnAddress 内部提供命令的地址在要执行的调用函数的,在控件回调用方之后。
将生成以下过程和步骤在调试器。 您逐句通过程序,请注意从 _ReturnAddress返回的地址。 然后,在从返回 _ReturnAddress 使用的功能后,打开 如何:使用“反汇编”窗口 并注意下命令的地址是该地址从 _ReturnAddress返回已执行的匹配。
优化 (例如内联会影响返回地址。 例如,在中,如果下面的示例程序编译 /Ob1, inline_func 内联到调用函数, main。 因此,对从 inline_func 的 _ReturnAddress ,并 main 将每个生成相同的值。
当 _ReturnAddress 程序中使用编译 /clr时,包含 _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;
}