fegetexceptflag()
attempts to store all the currently raised exceptions included in the excepts
in an object pointed to by the flag_p
pointer. It is defined in the fenv.h
header.
int fegetexceptflag( fexcept_t* flagp, int excepts );
flagp
: A pointer of type fexcept_t
that points to the object where the floating-point exceptions will be saved.excepts
: A bitmask consisting of the bitwise OR
of all the floating-point exceptions that need to be saved.fegetexceptflag()
returns on success; otherwise, it returns a non-zero value.#include<stdio.h>#include <math.h>#include <fenv.h>void raise_exceptions(){feraiseexcept(FE_OVERFLOW);feraiseexcept(FE_INEXACT);}void display_raised_exceptions(){printf("Currently raised exceptions are: ");if (fetestexcept(FE_DIVBYZERO)) printf("FE_DIVBYZERO ");if (fetestexcept(FE_INVALID)) printf("FE_INVALID ");if (fetestexcept(FE_INEXACT)) printf("FE_INEXACT ");if (fetestexcept(FE_UNDERFLOW)) printf("FE_UNDERFLOW ");if (fetestexcept(FE_OVERFLOW)) printf("FE_OVERFLOW ");if (!fetestexcept(FE_ALL_EXCEPT)) printf("NONE ");printf("\n");}int main() {fexcept_t excepts;raise_exceptions();display_raised_exceptions();fegetexceptflag(&excepts, FE_ALL_EXCEPT);printf("CLEARING ALL EXCEPTIONS...\n");feclearexcept(FE_ALL_EXCEPT);display_raised_exceptions();printf("RESTORING STORED EXCEPTIONS...\n");fesetexceptflag(&excepts, FE_ALL_EXCEPT);display_raised_exceptions();}
We initialize a variable of type fexcept_t
called excepts
, which we will use to store the floating-point exceptions.
In the function raise_exceptions()
, we use feraiseexccept()
to raise the floating-point exceptions of our choice.
We store these exceptions in the variable excepts
and then clear all exceptions using:
feclearexcept(FE_ALL_EXCEPT);
Then, we restore the exceptions using the fesetexceptflag()
function. The output will show that all of the exceptions that were stored in excepts
have been raised.
Free Resources