C库 - fegetexceptflag() 函数



C 的fenvfegetexceptflag() 函数用于检索由'excepts'参数指定的浮点异常标志的当前状态或完整内容。此参数是浮点异常宏的按位 OR 组合,例如FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, 和 FE_UNDERFLOW

浮点异常标志的完整内容不仅仅是指示是否发生异常的真/假值。相反,它可能更复杂,例如一个结构体,其中包含异常的状态以及其他详细信息,例如导致异常的代码的地址。

语法

以下是fegetexceptflag() 函数的C库语法:

int fegetexceptflag( fexcept_t* flagp, int excepts );

参数

此函数接受以下参数:

  • flagp − 它表示指向'fexcept_t'对象的指针,标志将存储在其中或从中读取。

  • excepts − 它表示要获取的异常标志的位掩码列表。

返回值

如果成功获取指定异常的状态,则此函数返回 0;否则返回非零值。

示例 1

以下是演示fegetexceptflag() 函数用法的基本C程序。

#include <stdio.h>
#include <fenv.h>

int main() {
   // Declare a variable to hold the exception flags
   fexcept_t flag;
   
   // Perform some floating-point operations that may raise exceptions
   double x = 1.0 / 0.0;
   
   // retrieve the state of the FE_DIVBYZERO exception flag
   if (fegetexceptflag(&flag, FE_DIVBYZERO) != 0) {
      printf("Failed to obtain the state of the FE_DIVBYZERO exception flag.\n");
      return 1;
   } else {
      printf("Successfully obtained the state of the FE_DIVBYZERO exception flag.\n");
   }
   return 0;
}

输出

以下是输出:

Successfully obtained the state of the FE_DIVBYZERO exception flag.

示例 2

以下C程序使用fegetexceptflag() 函数。在这里,我们获取多个异常标志。

#include <stdio.h>
#include <fenv.h>
int main() {
   fexcept_t flag;
   
   // Perform some floating-point operations that may raise exceptions
   double x = 0.0 / 0.0;
   double y = 1e308 * 1e308;
   
   // Get the state of the FE_INVALID and FE_OVERFLOW exception flags
   if (fegetexceptflag(&flag, FE_INVALID | FE_OVERFLOW) != 0) {
      printf("Failed to obtain the state of the FE_INVALID and FE_OVERFLOW exception flags.\n");
      return 1;
   } else {
      printf("Successfully obtained the state of the FE_INVALID and FE_OVERFLOW exception flags.\n");
   }
   return 0;
}

输出

以下是输出:

Successfully obtained the state of the FE_INVALID and FE_OVERFLOW exception flags.

示例 3

下面的示例,如果成功获取指定异常的状态,则返回 0。

#include <stdio.h>
#include <fenv.h>
#include <math.h>
int main() {
   fexcept_t flag;

   // Perform some floating-point operations that may raise exceptions
   double x = 10.0 / 0.0;
   double square_root = sqrt(-1.0);

   // Get the state of the FE_INVALID and FE_OVERFLOW exception flags
   int res = fegetexceptflag(&flag, FE_INVALID | FE_OVERFLOW);
   printf("%d", res);
   return 0;
}

输出

以下是输出:

0
c_library_fenv_h.htm
广告