C 库 - fegetexceptflag() 函数

❮ C 标准库 - <fenv.h>


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

❮ C 标准库 - <fenv.h>