Namespaces
Variants

fegetexceptflag, fesetexceptflag

From cppreference.net
< c ‎ | numeric ‎ | fenv
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