分享方式:


_ReturnAddress

Microsoft 特定的

內部 _ReturnAddress 函數會提供呼叫函式中指令的位址,該指令會在控制項傳回給呼叫端之後執行。

建置下列程式,並在偵錯工具中逐步執行。 當您逐步執行程式時,請注意從 _ReturnAddress 傳回的位址。 然後,在從使用 所在的 _ReturnAddress 函式傳回之後,開啟 How to:使用反組解碼視窗 ,並注意要執行的下一個指令位址符合從 _ReturnAddress 傳回的位址。

內嵌之類的優化可能會影響傳回位址。 例如,如果下列範例程式是以 /Ob1 編譯, inline_func 則會內嵌至呼叫函式 。 main 因此,對 inline_func_ReturnAddressmain 的呼叫都會產生相同的值。

_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 特定的

另請參閱

_AddressOfReturnAddress
編譯器內建函式
關鍵字