_ReturnAddress
Microsoft 专用
_ReturnAddress
内部函数提供调用函数中指令的地址,该函数将在控制权返回给调用者后执行。
生成以下程序并在调试器中逐步完成。 在逐步执行程序时,请注意从 _ReturnAddress
中返回的地址。 然后,在从使用 _ReturnAddress
的函数返回后立即打开如何:使用反汇编窗口,并注意要执行的下一条指令的地址与从 _ReturnAddress
返回的地址匹配。
内联等优化可能会影响返回地址。 例如,如果下面的示例程序使用 /Ob1 编译,inline_func
便会内联到调用函数 main
中。 因此,从 inline_func
和 main
对 _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 专用