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