C 库 - feholdexcept() 函数

❮ C 标准库 - <fenv.h>


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

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

语法

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

feholdexcept(fenv_t *envp);

参数

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

返回值

此函数返回一个整数值,即 -

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

  • 如果无法设置环境变量,则返回非零值。

示例 1

feholdexcept()

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

int main() {
    fenv_t env;
    
    // 保存并清除所有异常
    feholdexcept(&env);
    
    // 恢复已保存的异常
    fesetenv(&env); 
    printf("异常已恢复。");
    return 0;
}

输出

上述代码产生以下结果 -

异常已恢复。

示例 2

下面的程序保存并清除异常,以便在除以零的情况下执行操作而不停止,然后检查是否发生了此类异常。

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

int main() {
    fenv_t env;
    
    // 保存并清除异常
    feholdexcept(&env);
    
    // 执行可能引发异常的操作
    if (fetestexcept(FE_DIVBYZERO)) {
       printf("Division by zero occurred, but calculations continued.");
    }
    // 恢复环境以正确处理异常
    fesetenv(&env);
    return 0;
}

输出

执行上述代码后,我们得到以下结果 -

=== Code Execution Successful ===

❮ C 标准库 - <fenv.h>