Поделиться через


_ReturnAddress

Блок, относящийся только к системам Майкрософт

Встроенная _ReturnAddress функция предоставляет адрес инструкции в вызывающей функции, которая будет выполняться после возврата элемента управления вызывающей функции.

Создайте следующую программу и выполните его в отладчике. При пошаговом переходе по программе обратите внимание на адрес, возвращаемый из _ReturnAddress. Затем сразу после возвращения из функции _ReturnAddress , в которой использовался, откройте окно "Практическое руководство" и обратите внимание, что адрес следующей инструкции будет соответствовать адресу, возвращаемого из _ReturnAddress.

Оптимизации, такие как встраивание, могут повлиять на возвращаемый адрес. Например, если приведенный ниже пример программы компилируется с параметром /Ob1, inline_func будет вложен в вызывающую функцию. main Таким образом, вызовы _ReturnAddress из inline_func и будут производить одно и main то же значение.

Если _ReturnAddress используется в программе, скомпилированной с /clr, функция, содержащая _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;
}

Завершение блока, относящегося только к системам Майкрософт

См. также

_AddressOfReturnAddress
Встроенные компоненты компилятора
Ключевые слова