fegetexceptflag, fesetexceptflag
|
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
|