다음을 통해 공유


_ReturnAddress

Microsoft 전용

내장 함수는 _ReturnAddress 컨트롤이 호출자에게 반환된 후 실행될 호출 함수의 명령 주소를 제공합니다.

다음 프로그램을 빌드하고 디버거에서 단계별로 실행합니다. 프로그램을 단계별로 진행하면서 반환 _ReturnAddress되는 주소를 적어 둡니다. 그런 다음 사용된 함수 _ReturnAddress 에서 즉시 반환한 후 방법: 디스어셈블리 창을 사용하여 실행할 다음 명령의 주소가 반환_ReturnAddress된 주소와 일치하는지 확인합니다.

인라인 처리와 같은 최적화는 반환 주소에 영향을 줄 수 있습니다. 예를 들어 아래 샘플 프로그램이 /Ob1inline_func컴파일된 경우 호출 함수main에 인라인 처리됩니다. 따라서 원본 및 _ReturnAddress inline_func main 호출은 각각 동일한 값을 생성합니다.

/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 전용 종료

참고 항목

_AddressOfReturnAddress
컴파일러 내장 함수
키워드