C 库 - feraiseexcept() 函数



C 的fenvferaiseexcept() 函数用于引发“excepts”参数中指定的浮点异常。此参数是浮点异常宏的按位或组合,例如FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW和FE_UNDERFLOW

如果 excepts 在引发异常时包含 FE_OVERFLOW 或 FE_UNDERFLOW,则该函数也可能引发 FE_INEXACT。因为引发异常的顺序未指定,但 FE_OVERFLOW 和 FE_UNDERFLOW 始终在 FE_INEXACT 之前引发。

语法

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

int feraiseexcept( int excepts );

参数

此函数接受单个参数:

  • excepts - 它表示要引发的异常标志的位掩码。

返回值

如果所有列出的异常都已引发,则此函数返回 0,否则返回非零值。

示例 1

以下是用 C 编写的基本程序,用于演示 feraiseexcept() 函数的使用。

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

int main() {
   // Enable exceptions for division by zero and overflow
   if (feraiseexcept(FE_DIVBYZERO | FE_OVERFLOW) != 0) {
      printf("Failed to raise the specified floating-point exceptions.\n");
      return 1;
   } else {
      printf("Successfully raised the specified floating-point exceptions.\n");
   }
   return 0;
}

输出

以下是输出:

Successfully raised the specified floating-point exceptions.

示例 2

以下 C 程序使用 feraiseexcept() 函数引发“FE_INEXACT”浮点异常。

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

int main() {
   // Raise the FE_INEXACT floating-point exception
   if (feraiseexcept(FE_INEXACT) != 0) {
      printf("Failed to raise the FE_INEXACT floating-point exception.\n");
      return 1;
   } else {
      printf("Successfully raised the FE_INEXACT floating-point exception.\n");
   }
   return 0;
}

输出

以下是输出:

Successfully raised the FE_INEXACT floating-point exception.

示例 3

以下示例引发 FE_OVERFLOW 和 FE_UNDERFLOW 浮点异常。此外,它还检查并报告已引发的异常,表明当包含 FE_OVERFLOW 或 FE_UNDERFLOW 时,也可能引发 FE_INEXACT。

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

int main() {
   // Raise the FE_OVERFLOW and FE_UNDERFLOW floating-point exceptions
   if (feraiseexcept(FE_OVERFLOW | FE_UNDERFLOW) != 0) {
      printf("Failed to raise the specified floating-point exceptions.\n");
      return 1;
   } else {
      printf("Successfully raised the specified floating-point exceptions.\n");
   }

   // Check which exceptions are currently raised
   int raised_excepts = fetestexcept(FE_ALL_EXCEPT);
   if (raised_excepts & FE_OVERFLOW) {
      printf("FE_OVERFLOW is raised.\n");
   }
   if (raised_excepts & FE_UNDERFLOW) {
      printf("FE_UNDERFLOW is raised.\n");
   }
   if (raised_excepts & FE_INEXACT) {
      printf("FE_INEXACT is also raised.\n");
   }
   return 0;
}

输出

以下是输出:

Successfully raised the specified floating-point exceptions.
FE_OVERFLOW is raised.
FE_UNDERFLOW is raised.
c_library_fenv_h.htm
广告

© . All rights reserved.