Note
The following functionality requires you to select a floating-point
model that supports exceptions, such as --fpmode=ieee_full or --fpmode=ieee_fixed.
C99 provides the following functions to clear, test and raise
exceptions:
void feclearexcept(int excepts); int fetestexcept(int excepts); void feraiseexcept(int excepts);
The feclearexcept() function clears the
sticky flags for the given exceptions. The fetestexcept() function
returns the bitwise OR of the sticky flags for the given exceptions,
so that if the Overflow flag was set but the Underflow flag was
not, then calling fetestexcept(FE_OVERFLOW|FE_UNDERFLOW) would
return FE_OVERFLOW.
The feraiseexcept() function raises the
given exceptions, in unspecified order. If an exception trap is
enabled for an exception raised this way, it is called.
C99 also provides functions to save and restore everything
about a given exception. This includes the sticky flag, whether
the exception is trapped, and the address of the trap handler, if any.
These functions are:
void fegetexceptflag(fexcept_t *flagp, int excepts); void fesetexceptflag(const fexcept_t *flagp, int excepts);
The fegetexceptflag() function copies
all the information relating to the given exceptions into the fexcept_t variable
provided. The fesetexceptflag() function copies
all the information relating to the given exceptions from the fexcept_t variable
into the current floating-point environment.
Note
fesetexceptflag() can be used to set
the sticky flag of a trapped exception to 1 without
calling the trap handler, whereas feraiseexcept() calls
the trap handler for any trapped exception.
See also