C 库 - fesetexceptflag() 函数



C 的fenvfesetexceptflag() 函数用于通过 'excepts' 参数设置指定浮点异常标志的状态。此参数是浮点异常宏的按位或组合,例如FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW 和 FE_UNDERFLOW

语法

以下是 fesetexceptflag() 函数的 C 库语法 -

int fesetexceptflag(const fexcept_t *flagp, int excepts);

参数

此函数接受以下参数 -

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

  • excepts - 它表示要设置的异常标志的位掩码列表。

返回值

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

示例 1

以下是用 fesetexceptflag() 设置单个浮点异常标志的基本 C 示例。

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

int main() {
   // Declare a variable to hold the exception flag
   fexcept_t flag;

   // Set the FE_OVERFLOW exception flag
   if (fesetexceptflag(&flag, FE_OVERFLOW) != 0) {
      printf("Failed to set the FE_OVERFLOW exception flag.\n");
      return 1;
   } else {
      printf("Successfully set the FE_OVERFLOW exception flag.\n");
   }
   return 0;
}

输出

以下是输出 -

Successfully set the FE_OVERFLOW exception flag.

示例 2

以下 C 程序使用 fesetexceptflag() 设置 FE_INVALID 异常标志。

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

int main() {
    // Declare a variable to hold the exception flag
    fexcept_t flag;

    // Set the FE_OVERFLOW exception flag
    if (fesetexceptflag(&flag, FE_INVALID) != 0) {
        printf("Failed to set the FE_INVALID exception flag.\n");
        return 1;
    } else {
        printf("Successfully set the FE_INVALID exception flag.\n");
    }
    return 0;
}

输出

以下是输出 -

Successfully set the FE_INVALID exception flag.

示例 3

这是另一个设置 FE_INVALID 异常标志,然后检查它是否已成功设置的示例。

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

   // Set the FE_INVALID exception flag
   if (fesetexceptflag(&flag, FE_INVALID) != 0) {
      printf("Failed to set the FE_INVALID exception flag.\n");
      return 1;
   } else {
      printf("Successfully set the FE_INVALID exception flag.\n");
   }

   // Perform an invalid floating-point operation to trigger FE_INVALID
   double result = 1.0 / 0.0;

   // Check if FE_INVALID is raised
   if (fetestexcept(FE_INVALID)) {
      printf("FE_INVALID exception is raised due to division by zero.\n");
   } else {
      printf("FE_INVALID exception is not raised.\n");
   }
   return 0;
}

输出

以下是输出 -

Successfully set the FE_INVALID exception flag.
FE_INVALID exception is not raised.
c_library_fenv_h.htm
广告