C 库 - fesetexceptflag() 函数
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 异常。