函数
<cfenv>

fesetexceptflag

int fesetexceptflag (const fexcept_t* flagp, int excepts);
设置浮点异常标志
尝试使用由 flagp 指向的对象中存储的状态,来设置 excepts 所指示的异常。

如果成功,该函数会更改浮点环境的当前状态,设置所请求的异常标志,但实际上并不会引发异常。

调用此函数的程序应确保在调用时启用了 pragma FENV_ACCESS

参数

flagp
指向一个 fexcept_t 对象的指针,该对象表示浮点异常。
flagp 指向的值必须是先前通过调用 fegetexceptflag 设置的,并且至少包含 excepts 指定的异常。
excepts
位掩码值:实现所支持的任意数量的浮点异常值通过按位或(OR)运算的组合。
宏值描述
FE_DIVBYZERO极点错误:除以零,或一些其他渐近无穷大的结果(由有限参数产生)。
FE_INEXACT不精确:结果不精确。
FE_INVALID定义域错误:至少有一个参数是函数未定义的值。
FE_OVERFLOW上溢范围错误:结果的量级太大,无法表示为返回类型的值。
FE_UNDERFLOW下溢范围错误:结果的量级太小,无法表示为返回类型的值。
FE_ALL_EXCEPT所有异常(选择实现支持的所有异常)。
某些库实现可能支持额外的浮点异常值(其对应的宏也以 FE_ 开头)。
库可能仅在 <fenv.h> 中定义它们支持的上述宏值(其他宏可能未定义)。
至少所有上述宏值都在 <cfenv> 中有定义(即使实现不支持)。

返回值

如果函数成功设置了标志(或如果 excepts 为零),则返回零。
否则返回一个非零值。

数据竞争

每个线程维护一个独立的浮点环境及其自身的状态。生成一个新线程会复制当前状态。[此规定适用于 C11 和 C++11 实现]

异常

无异常保证:此函数从不抛出异常。
请注意,C 语言的浮点异常不是 C++ 异常,因此不能被 try/catch 块捕获。
在 pragma FENV_ACCESS 关闭的情况下调用此函数会导致未定义行为。

另见