C 库 - feupdateenv() 函数

❮ C 标准库 - <fenv.h>


C fenv 库中的 feupdateenv() 函数用于恢复浮点环境。它还可以处理在使用 feholdexcept 保存的环境发生异常时产生的异常。feholdexcept 可以恢复原始环境以恢复异常。

语法

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

feupdateenv(const fenv_t *envp);

参数

此函数仅接受一个参数 -

  • 它接受一个指向 fenv_t 对象的指针,该对象会引发异常处理程序。

返回值

  • 程序编译成功时,返回整数形式的零值。如果无法引发异常,则返回非零值。

示例 1

以下是 C 库程序,展示了 feupdateenv() 函数的用法。

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

int main() {
    fenv_t env;
    
    // 保存并清除异常
    feholdexcept(&env);
    
    // 恢复环境并引发异常
    feupdateenv(&env); 
    printf("Environment restored, exceptions handled.");
    return 0;
}

输出

上述代码产生以下结果 -

Environment restored, exceptions handled.

示例 2

为了保存并清除异常,我们可以执行除零操作,恢复环境并检查异常是否发生。

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

int main() {
    fenv_t env;
    
    // 保存并清除异常
    feholdexcept(&env);
    
    // 除以零
    double result = 1.0 / 0.0;
    
    // 恢复环境并处理异常
    feupdateenv(&env); 
    if (fetestexcept(FE_DIVBYZERO)) {
       printf("Division by zero occurred and handled.");
    }
    return 0;
}

输出

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

Division by zero occurred and handled.

示例 3

为了恢复原始环境,它执行了引发和溢出异常的任务,同时还执行了与示例 2 相同的程序(保存并清除异常)。

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

int main() {
    fenv_t env1, env2;
    // 保存并清除异常
    feholdexcept(&env1);
    
    // 引发溢出异常
    feraiseexcept(FE_OVERFLOW);
    
    // 再次保存并清除异常
    feholdexcept(&env2);
    
    // 恢复原始环境
   feupdateenv(&env1); 
   printf("恢复原有环境。");
   return 0;
}

输出

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

恢复原有环境。

❮ C 标准库 - <fenv.h>