Partager via


_ReturnAddress

Section spécifique à Microsoft

L’intrinsèque _ReturnAddress fournit l’adresse de l’instruction dans la fonction appelante qui sera exécutée après le retour du contrôle à l’appelant.

Générez le programme suivant et parcourez-le dans le débogueur. Lorsque vous parcourez le programme, notez l’adresse retournée par _ReturnAddress. Ensuite, immédiatement après le retour de la fonction où _ReturnAddress elle a été utilisée, ouvrez la fenêtre De désassemblement et notez que l’adresse de l’instruction suivante à exécuter correspond à l’adresse retournée par _ReturnAddress.

Les optimisations telles que l’incorporation peuvent affecter l’adresse de retour. Par exemple, si l’exemple de programme ci-dessous est compilé avec /Ob1, inline_func est incorporé dans la fonction appelante. main Par conséquent, les appels à _ReturnAddress partir inline_func de et main génèrent chacun la même valeur.

Lorsqu’elle _ReturnAddress est utilisée dans un programme compilé avec /clr, la fonction contenant l’appel _ReturnAddress est compilée en tant que fonction native. Lorsqu’une fonction compilée en tant qu’appels managés dans la fonction contenant _ReturnAddress, _ReturnAddress peut ne pas se comporter comme prévu.

Spécifications

Fichier<d’en-tête intrin.h>

Exemple

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

FIN de la section spécifique à Microsoft

Voir aussi

_AddressOfReturnAddress
Intrinsèques du compilateur
Mots clés