C++ <cfenv> - fesetexceptflag() Function
The C++ <cfenv> fesetexceptflag() function attempts to set the floating-point exception flags indicated by excepts with the states stored in the fexcept_t object pointed by flagp. Programs calling this function shall ensure that pragma FENV_ACCESS is enabled for the call.
If successful, the function changes the current state of the floating-point environment, setting the requested exception flags, but without actually raising the exceptions.
Syntax
int fesetexceptflag (const fexcept_t* flagp, int excepts);
Parameters
flagp |
Specify pointer to an fexcept_t object from where the flags will be read. | ||||||||||||||
excepts |
Specify bitmask listing the floating-point exception flags to set.
Certain library implementations may define additional macro constants in <cfenv> to identify additional floating-point exceptions (with their corresponding macros also beginning with FE_). |
Return Value
Returns 0 if the flags are successfully set. Returns a non-zero value otherwise.
Exception
This function never throws exceptions.
Example:
The example below shows the usage of fesetexceptflag() function.
#include <iostream> #include <cfenv> #include <cmath> #pragma STDC FENV_ACCESS ON using namespace std; void FE_Exceptions_Message(void) { cout<<"Exceptions raised:"; if(fetestexcept(FE_DIVBYZERO)) cout<<" FE_DIVBYZERO"; if(fetestexcept(FE_INEXACT)) cout<<" FE_INEXACT"; if(fetestexcept(FE_INVALID)) cout<<" FE_INVALID"; if(fetestexcept(FE_OVERFLOW)) cout<<" FE_OVERFLOW"; if(fetestexcept(FE_UNDERFLOW)) cout<<" FE_UNDERFLOW"; cout<<endl; } int main (){ //creating fexcept_t object fexcept_t excepts; //raising FE_DIVBYZERO exception feraiseexcept(FE_DIVBYZERO); FE_Exceptions_Message(); //storing current exception flag fegetexceptflag(&excepts,FE_ALL_EXCEPT); //clear previous exception flag and //create another exception flags feclearexcept(FE_ALL_EXCEPT); feraiseexcept(FE_INVALID | FE_INEXACT); FE_Exceptions_Message(); //restoring previous exception flags fesetexceptflag(&excepts,FE_ALL_EXCEPT); FE_Exceptions_Message(); return 0; }
The output of the above code will be:
Exceptions raised: FE_DIVBYZERO Exceptions raised: FE_INEXACT FE_INVALID Exceptions raised: FE_DIVBYZERO
❮ C++ <cfenv> Library