Bagikan melalui


_ReturnAddress

Khusus Microsoft

Intrinsik _ReturnAddress menyediakan alamat instruksi dalam fungsi panggilan yang akan dijalankan setelah kontrol kembali ke pemanggil.

Bangun program berikut dan lakukan langkah-langkah di debugger. Saat Anda menelusuri program, perhatikan alamat yang dikembalikan dari _ReturnAddress. Kemudian, segera setelah kembali dari fungsi tempat _ReturnAddress digunakan, buka Jendela Cara: Gunakan Jendela Pembongkaran dan perhatikan bahwa alamat instruksi berikutnya yang akan dijalankan cocok dengan alamat yang dikembalikan dari _ReturnAddress.

Pengoptimalan seperti inlining dapat memengaruhi alamat pengembalian. Misalnya, jika program sampel di bawah ini dikompilasi dengan /Ob1, inline_func akan disebarkan ke dalam fungsi panggilan, main. Oleh karena itu, panggilan ke _ReturnAddress dari inline_func dan main masing-masing akan menghasilkan nilai yang sama.

Ketika _ReturnAddress digunakan dalam program yang dikompilasi dengan /clr, fungsi yang berisi _ReturnAddress panggilan akan dikompilasi sebagai fungsi asli. Ketika fungsi yang dikompilasi sebagai panggilan terkelola ke dalam fungsi yang berisi _ReturnAddress, _ReturnAddress mungkin tidak berulah seperti yang diharapkan.

Persyaratan

File header<intrin.h>

Contoh

// 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;
}

END Khusus Microsoft

Lihat juga

_AddressOfReturnAddress
Intrinsik pengkompilasi
Kata kunci