fegetexceptflag, fesetexceptflag
|
Défini dans l'en-tête
<fenv.h>
|
||
|
int
fegetexceptflag
(
fexcept_t
*
flagp,
int
excepts
)
;
|
(1) | (depuis C99) |
|
int
fesetexceptflag
(
const
fexcept_t
*
flagp,
int
excepts
)
;
|
(2) | (depuis C99) |
1) Tente d'obtenir l'intégralité des indicateurs d'exception en virgule flottante qui sont listés dans l'argument de masque de bits
excepts
, qui est un OU binaire des
macros d'exception en virgule flottante
.
2) Tente de copier l'intégralité du contenu des indicateurs d'exception en virgule flottante qui sont listés dans
excepts
depuis
flagp
vers l'environnement en virgule flottante. Ne lève aucune exception, modifie uniquement les indicateurs.
Le contenu complet d'un indicateur d'exception en virgule flottante n'est pas nécessairement une valeur booléenne indiquant si l'exception est déclenchée ou effacée. Par exemple, il peut s'agir d'une structure qui inclut l'état booléen et l'adresse du code qui a déclenché l'exception. Ces fonctions obtiennent l'intégralité de ce contenu et le récupèrent/stockent dans
flagp
dans un format défini par l'implémentation.
Table des matières |
Paramètres
| flagp | - | pointeur vers un objet fexcept_t où les drapeaux seront stockés ou lus |
| excepts | - | masque de bits listant les drapeaux d'exception à obtenir/définir |
Valeur de retour
0 en cas de succès, non nul sinon.
Exemple
#include <stdio.h> #include <fenv.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void) { printf("current exceptions raised: "); if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO"); if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT"); if(fetestexcept(FE_INVALID)) printf(" FE_INVALID"); if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW"); if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW"); if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none"); printf("\n"); } int main(void) { fexcept_t excepts; /* Configuration d'un ensemble "courant" de drapeaux d'exception. */ feraiseexcept(FE_INVALID); show_fe_exceptions(); /* Sauvegarde des drapeaux d'exception courants. */ fegetexceptflag(&excepts,FE_ALL_EXCEPT); /* Lève temporairement deux autres exceptions. */ feclearexcept(FE_ALL_EXCEPT); feraiseexcept(FE_OVERFLOW | FE_INEXACT); show_fe_exceptions(); /* Restaure les drapeaux d'exception précédents. */ fesetexceptflag(&excepts,FE_ALL_EXCEPT); show_fe_exceptions(); return 0; }
Sortie :
current exceptions raised: FE_INVALID current exceptions raised: FE_INEXACT FE_OVERFLOW current exceptions raised: FE_INVALID
Références
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.6.2.2 La fonction fegetexceptflag (p : 210)
-
- 7.6.2.4 La fonction fesetexceptflag (p : 211)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.6.2.2 La fonction fegetexceptflag (p : 191)
-
- 7.6.2.4 La fonction fesetexceptflag (p : 192)
Voir aussi
|
Documentation C++
pour
fegetexceptflag
,
fesetexceptflag
|