La fonction feholdexcept () en C ++ enregistre d'abord l'environnement en virgule flottante actuel dans un objet fenv_t, puis efface tous les indicateurs d'état en virgule flottante.
La fonction feholdexcept () est définie dans le fichier d'en-tête.
prototype feholdexcept ()
int feholdexcept (fenv_t * envp);
La fonction feholdexcept () enregistre l'environnement en virgule flottante actuel dans l'objet pointé par envp comme fait par fegetenv () et efface tous les indicateurs d'état en virgule flottante.
Enfin, il installe le mode non-stop pour que les futures exceptions en virgule flottante n'interrompent pas l'exécution, jusqu'à ce que l'environnement en virgule flottante soit restauré en appelant feupdateenv ou fesetenv.
Paramètres feholdexcept ()
- envp: pointeur vers un objet de type fenv_t qui stocke l'état de l'environnement en virgule flottante.
feholdexcept () Valeur de retour
- En cas de succès, la fonction feholdexcept () renvoie 0.
- En cas d'échec, il renvoie une valeur différente de zéro.
Exemple: Comment fonctionne la fonction feholdexcept ()?
#include #include #include #pragma STDC FENV_ACCESS ON using namespace std; void print_exceptions() ( cout << "Raised exceptions: "; if(fetestexcept(FE_ALL_EXCEPT)) ( if(fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO "; if(fetestexcept(FE_INEXACT)) cout << "FE_INEXACT "; if(fetestexcept(FE_INVALID)) cout << "FE_INVALID "; if(fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW "; if(fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW "; ) else cout << "None"; cout << endl; ) int main(void) ( fenv_t envp; /* raise certain exceptions */ feraiseexcept(FE_INVALID|FE_DIVBYZERO); print_exceptions(); /* saves and clears current exceptions */ feholdexcept(&envp); print_exceptions(); /* restores saved exceptions */ feupdateenv(&envp); print_exceptions(); return 0; )
Lorsque vous exécutez le programme, la sortie sera:
Exceptions déclenchées: FE_DIVBYZERO FE_INVALID Exceptions déclenchées: aucune Exceptions déclenchées: FE_DIVBYZERO FE_INVALID