_ReturnAddress
[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 Blank topics are included as placeholders.]
Microsoft 固有の仕様 →
_ReturnAddress の組み込みは呼び出し元に返されるの後で実行される呼び出し元の関数の命令のアドレスを指定します。
デバッガーでプログラムを通じて次の手順を実行します。 プログラムをステップ実行すると**_ReturnAddress** から返されるアドレスに注意してください。 次に**_ReturnAddress** が使用された関数から返された直後に方法 : [逆アセンブル] ウィンドウを使用する を開きアドレスが _ReturnAddress で返される実行された一致する次の命令のアドレスことに注意してください。
インライン展開のような最適化がリターン アドレスに影響する場合があります。 たとえばサンプル プログラムの下の /Ob1 とコンパイル inline_func が呼び出し元の関数にmain にインライン展開されます。 したがってinline_func から _ReturnAddress と 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;
}