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


_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

Встроенные объекты компилятора

Ключевые слова в C++