_ReturnAddress
Microsoft 專有的
_ReturnAddress內建提供控制項傳回給呼叫者後,就會執行呼叫函式中的指令位址。
建立下列的程式和偵錯工具的逐步執行它。 當您逐步執行程式,請注意傳回的地址**_ReturnAddress**。 然後,從函式傳回之後,立即在**_ReturnAddress所使用的開啟如何:使用反組譯碼視窗 ,並記下所執行的下一個指令的位址符合所傳回的位址_ReturnAddress**。
這類的內嵌月最佳化會影響到 [寄件地址。 比方說,如果下面這個範例程式時加以編譯是 /Ob1, inline_func將會內嵌到呼叫的函式, main。 因此,呼叫**_ReturnAddress**的inline_func和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;
}