C 库 - fegetexceptflag() 函数
C fenv 库中的 fegetexceptflag() 函数用于检索由"excepts"参数指定的浮点异常标志的当前状态或全部内容。该参数是浮点异常宏的按位或组合,例如 FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW 和 FE_UNDERFLOW。
浮点异常标志的全部内容不仅仅是指示是否发生异常的 True/False。相反,它可能更复杂,例如包含异常状态和其他详细信息(例如导致异常的代码地址)的结构。
语法
以下是 fegetexceptflag() 函数的 C 库语法 -
int fegetexceptflag( fexcept_t* flagp, int excepts );
参数
此函数接受以下参数 -
-
flagp - 指向"fexcept_t"对象的指针,用于存储或读取标志。
excepts - 表示要获取的异常标志的位掩码列表。
返回值
如果成功获取指定异常的状态,则此函数返回 0,否则返回非零值。
示例 1
以下是演示 fegetexceptflag() 函数用法的基本 C 程序。
#include <stdio.h> #include <fenv.h> int main() { // 声明一个变量来保存异常标志 fexcept_t flag; // 执行一些可能引发异常的浮点运算 double x = 1.0 / 0.0; // 获取 FE_DIVBYZERO 异常标志的状态 if (fegetexceptflag(&flag, FE_DIVBYZERO) != 0) { printf("获取 FE_DIVBYZERO 异常标志的状态失败。"); return 1; } else { printf("成功获取 FE_DIVBYZERO 异常标志的状态。"); } return 0; }
输出
以下是输出 -
成功获取 FE_DIVBYZERO 异常标志的状态。
示例 2
以下 C 程序使用 fegetexceptflag() 函数。此处,我们获取了多个异常标志。
#include <stdio.h> #include <fenv.h> int main() { fexcept_t flag; // 执行一些可能引发异常的浮点运算 double x = 0.0 / 0.0; double y = 1e308 * 1e308; // 获取 FE_INVALID 和 FE_OVERFLOW 异常标志的状态 if (fegetexceptflag(&flag, FE_INVALID | FE_OVERFLOW) != 0) { printf("获取 FE_INVALID 和 FE_OVERFLOW 异常标志的状态失败。"); return 1; } else { printf("获取 FE_INVALID 和 FE_OVERFLOW 异常标志的状态成功。"); } return 0; }
输出
以下是输出 -
成功获取 FE_INVALID 和 FE_OVERFLOW 异常标志的状态。
示例 3
以下示例如果成功获取指定异常的状态,则返回 0。
#include <stdio.h> #include <fenv.h> #include <math.h> int main() { fexcept_t flag; // 执行一些可能引发异常的浮点运算 double x = 10.0 / 0.0; double square_root = sqrt(-1.0); // 获取 FE_INVALID 和 FE_OVERFLOW 异常标志的状态 int res = fegetexceptflag(&flag, FE_INVALID | FE_OVERFLOW); printf("%d", res); return 0; }
输出
以下是输出 -
0