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 异常。

