Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

What is fegetexceptflag() in C?

Muhammad Ashir

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

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.

Prototype

int fegetexceptflag( fexcept_t* flagp, int excepts );

Parameters

  • 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.

Return value

  • fegetexceptflag() returns 00 on success; otherwise, it returns a non-zero value.

Example

#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.

RELATED TAGS

CONTRIBUTOR

Muhammad Ashir
Copyright ©2022 Educative, Inc. All rights reserved

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Keep Exploring