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