C 库 - feholdexcept() 函数



C 的fenvfeholdexcept() 函数用于执行可能引发异常的浮点运算,而不会中断程序的流程。

在程序编译成功后,我们可以恢复原始环境以恢复异常。

语法

以下是 feholdexcept() 函数的 C 库语法。

feholdexcept(fenv_t *envp);

参数

  • 该函数接受一个指向 fenv_t 对象的指针,在清除标志(浮点运算)之前,当前环境将存储在此对象中。

返回值

此函数返回一个整数值,其含义如下:

  • 零,如果程序正常运行。

  • 非零,如果无法设置环境。

示例 1

feholdexcept()

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

int main() {
   fenv_t env;
   
   // Save and clear all exceptions
   feholdexcept(&env); 
   
   // Restore the saved exceptions
   fesetenv(&env); 
   printf("Exceptions restored.\n");
   return 0;
}

输出

上述代码产生以下结果:

Exceptions restored.

示例 2

下面的程序保存并清除异常以执行运算,而不会因除以零而停止,然后检查是否发生了此类异常。

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

int main() {
   fenv_t env;
   
   // Save and clear exceptions
   feholdexcept(&env); 
   
   // Perform operations that may raise exception
   if (fetestexcept(FE_DIVBYZERO)) {
       printf("Division by zero occurred, but calculations continued.\n");
   }
   // Restore the environment to handle exceptions properly
   fesetenv(&env);
   return 0;
}

输出

执行上述代码后,我们将获得以下结果:

=== Code Execution Successful ===
c_library_fenv_h.htm
广告