_ReturnAddress
Microsoft 特定的
內部 _ReturnAddress
函數會提供呼叫函式中指令的位址,該指令會在控件傳回給呼叫端之後執行。
建置下列程式,並在調試程式中逐步執行。 當您逐步執行程式時,請注意從 _ReturnAddress
傳回的位址。 然後,在從使用 所在的 _ReturnAddress
函式傳回之後,開啟 How to:使用反組譯碼視窗 ,並注意要執行的下一個指令位址符合從 _ReturnAddress
傳回的位址。
內嵌之類的優化可能會影響傳回位址。 例如,如果下列範例程式是以 /Ob1 編譯,inline_func
則會內嵌至呼叫函式 。 main
因此,對 inline_func
和 _ReturnAddress
main
的呼叫都會產生相同的值。
當 _ReturnAddress
用於以 /clr 編譯的程式時,包含呼叫的 _ReturnAddress
函式將會編譯為原生函式。 當編譯為 Managed 呼叫的函式時,包含 _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;
}
END Microsoft 特定的