Partager via


_ReturnAddress

Spécifique à Microsoft

L'intrinsèque de _ReturnAddress fournit l'adresse de l'instruction dans l'appel de la fonction qui sera exécuté après le contrôle retourne à l'appelant.

Générez le programme et l'étape suivants parcourir dans le débogueur. Comme vous parcourez le programme, notez l'adresse retournée à partir de _ReturnAddress. Ensuite, immédiatement après le retour de la fonction où _ReturnAddress a été utilisé, ouvrez Comment : utiliser la fenêtre Code Machine et notez que l'adresse de l'instruction suivante d'être les correspondances exécutées que l'adresse que a été retourné d' _ReturnAddress.

Les optimisations telles que la fonctionnalité inline peuvent affecter l'adresse de retour. Par exemple, si l'exemple de programme ci-dessous est compilé avec /Ob1, inline_func sera inline dans l'appel de la fonction, main. Par conséquent, les appels à _ReturnAddress d' inline_func et à main remontera chaque produit la même valeur.

Lorsque _ReturnAddress est utilisé dans un programme compilé avec /clr, la fonction contenant l'appel d' _ReturnAddress sera compilée comme fonction native. Lorsque appelle aussi managés compilés par fonction dans la fonction contenant _ReturnAddress, _ReturnAddress peuvent ne pas se comporter que prévu.

Configuration requise

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

Voir aussi

Référence

_AddressOfReturnAddress

intrinsèques du compilateur

Mots clés C++