_ReturnAddress

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

_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
Встроенные объекты компилятора
Ключевые слова