C 库 - feholdexcept() 函数
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 ===