Namespaces
Variants

fegetexceptflag, fesetexceptflag

From cppreference.net
< c ‎ | numeric ‎ | fenv
Definiert im Header <fenv.h>
int fegetexceptflag ( fexcept_t * flagp, int excepts ) ;
(1) (seit C99)
int fesetexceptflag ( const fexcept_t * flagp, int excepts ) ;
(2) (seit C99)

1) Versucht, die vollständigen Inhalte der Gleitkomma-Ausnahmeflags zu erhalten, die in der Bitmasken-Argument excepts aufgelistet sind, welches eine bitweise ODER-Verknüpfung der Gleitkomma-Ausnahmemakros ist.

2) Versucht, die vollständigen Inhalte der Gleitkomma-Ausnahmeflags, die in excepts aufgelistet sind, von flagp in die Gleitkomma-Umgebung zu kopieren. Löst keine Ausnahmen aus, modifiziert nur die Flags.

Der vollständige Inhalt eines Gleitkomma-Ausnahmeflags ist nicht notwendigerweise ein boolescher Wert, der angibt, ob die Ausnahme ausgelöst oder gelöscht wurde. Zum Beispiel könnte es eine Struktur sein, die den booleschen Status und die Adresse des Codes enthält, der die Ausnahme ausgelöst hat. Diese Funktionen erfassen alle solchen Inhalte und speichern/lesen sie im flagp in implementierungsdefiniertem Format.

Inhaltsverzeichnis

Parameter

flagp - Zeiger auf ein fexcept_t Objekt, in dem die Flags gespeichert oder aus dem sie gelesen werden
excepts - Bitmaske, die die abzurufenden/zu setzenden Ausnahmeflags auflistet

Rückgabewert

0 bei Erfolg, andernfalls ungleich Null.

Beispiel

#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;
    /* Setup a "current" set of exception flags. */
    feraiseexcept(FE_INVALID);
    show_fe_exceptions();
    /* Save current exception flags. */
    fegetexceptflag(&excepts,FE_ALL_EXCEPT);
    /* Temporarily raise two other exceptions. */
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_OVERFLOW | FE_INEXACT);
    show_fe_exceptions();
    /* Restore previous exception flags. */
    fesetexceptflag(&excepts,FE_ALL_EXCEPT);
    show_fe_exceptions();
    return 0;
}

Ausgabe:

current exceptions raised: FE_INVALID
current exceptions raised: FE_INEXACT FE_OVERFLOW
current exceptions raised: FE_INVALID

Referenzen

  • C11-Standard (ISO/IEC 9899:2011):
  • 7.6.2.2 Die fegetexceptflag-Funktion (S. 210)
  • 7.6.2.4 Die fesetexceptflag-Funktion (S. 211)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.6.2.2 Die fegetexceptflag-Funktion (S. 191)
  • 7.6.2.4 Die fesetexceptflag-Funktion (S. 192)

Siehe auch

C++-Dokumentation für fegetexceptflag , fesetexceptflag