Namensräume
Varianten
Aktionen

fegetexceptflag, fesetexceptflag

Von cppreference.com
< c‎ | numeric‎ | fenv
Definiert in der Headerdatei <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, den vollständigen Inhalt der Gleitkomma-Ausnahme-Flags zu ermitteln, die in der Bitmasken-Argument excepts aufgeführt sind, welches ein bitweises ODER der Gleitkomma-Ausnahme-Makros ist.

2) Versucht, den vollständigen Inhalt der Gleitkomma-Ausnahme-Flags, die in excepts aufgeführt sind, von flagp in die Gleitkomma-Umgebung zu kopieren. Löst keine Ausnahmen aus, modifiziert nur die Flags.

Der vollständige Inhalt eines Gleitkomma-Ausnahme-Flags ist nicht notwendigerweise ein boolescher Wert, der angibt, ob die Ausnahme ausgelöst oder gelöscht wurde. Zum Beispiel kann es eine Struktur sein, die den booleschen Status und die Adresse des Codes enthält, der die Ausnahme ausgelöst hat. Diese Funktionen ermitteln den gesamten Inhalt und erhalten/speichern ihn in flagp in implementierungsabhängigem Format.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

0 bei Erfolg, andernfalls ungleich Null.

[bearbeiten] 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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

C++ Dokumentation für fegetexceptflag, fesetexceptflag