_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