_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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour