C 库 - fesetexceptflag() 函数

❮ C 标准库 - <fenv.h>


C fenv 库中的 fesetexceptflag() 函数用于通过"excepts"参数设置指定浮点异常标志的状态。该参数是浮点异常宏的按位或组合,例如 FE_DIVBYZERO、FE_INEXACT、FE_INVALID、FE_OVERFLOW 和 FE_UNDERFLOW

语法

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

int fesetexceptflag(const fexcept_t *flagp, int excepts);

参数

此函数接受以下参数 -

  • flagp - 指向"fexcept_t"对象的指针,用于存储或读取标志。

  • excepts - 表示要设置的异常标志的位掩码列表。

返回值

如果此函数成功获取指定异常的状态,则返回 0,否则返回非零。

示例 1

以下是一个基本的 C 示例,演示如何使用 fesetexceptflag() 设置单个浮点异常标志。

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

int main() {
    // 声明一个变量来保存异常标志
    fexcept_t flag;
    
    // 设置 FE_OVERFLOW 异常标志
    if (fesetexceptflag(&flag, FE_OVERFLOW) != 0) {
        printf("设置 FE_OVERFLOW 异常标志失败。");
        return 1;
    } else {
        printf("设置 FE_OVERFLOW 异常标志成功。");
    }
    return 0;
}

输出

以下是输出 -

设置 FE_OVERFLOW 异常标志成功。

示例 2

以下 C 程序使用 fesetexceptflag() 设置 FE_INVALID 异常标志。

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

int main() {
    // 声明一个变量来保存异常标志
    fexcept_t flag;
    
    // 设置 FE_OVERFLOW 异常标志
    if (fesetexceptflag(&flag, FE_INVALID) != 0) {
        printf("设置 FE_INVALID 异常标志失败。");
        return 1;
    } else {
        printf("设置 FE_INVALID 异常标志成功。");
    }
    return 0;
}

输出

以下是输出 -

设置 FE_INVALID 异常标志成功。

示例 3

这是另一个设置 FE_INVALID 异常标志并检查其是否设置成功的示例。

#include <stdio.h>
#include <fenv.h>
int main() {
    fexcept_t flag;
    
    // 设置 FE_INVALID 异常标志
    if (fesetexceptflag(&flag, FE_INVALID) != 0) {
        printf("设置 FE_INVALID 异常标志失败。");
        return 1;
    } else {
        printf("设置 FE_INVALID 异常标志成功。");
    }
    
    // 执行无效的浮点运算以触发 FE_INVALID
    double result = 1.0 / 0.0;
    
    // 检查是否引发 FE_INVALID
    if (fetestexcept(FE_INVALID)) {
        printf("由于除以零,引发了 FE_INVALID 异常。");
    } else {
        printf("未引发 FE_INVALID 异常。");
    }
    return 0;
}

输出

以下是输出 -

成功设置 FE_INVALID 异常标志。
未引发 FE_INVALID 异常。

❮ C 标准库 - <fenv.h>