fenv.h 文件为 5 个 IEEE 浮点异常标志中的每一个标志都定义了宏:FE_INEXACT、FE_UNDERFLOW、FE_OVERFLOW、FE_DIVBYZERO 和 FE_INVALID。此外,将宏 FE_ALL_EXCEPT 定义为所有 5 个标志宏进行按位“或”运算。在以下说明中,excepts 参数可以是 5 个标志宏中任何一个宏的按位“或”运算或者值 FE_ALL_EXCEPT。对于 fegetexceptflag 和 fesetexceptflag 函数,flagp 参数必须是指向类型为 fexcept_t 的对象的指针。这种类型是在 fenv.h 中定义的。
C99 定义了下表中的异常标志函数:
|
feclearexcept 函数清除指定的标志。fetestexcept 函数返回与设置的 excepts 参数指定的标志子集对应的宏值的按位“或”运算结果。例如,如果当前设置的标志只有不精确、下溢和除以零,则以下指令将 i 设置为 FE_DIVBYZERO。
i = fetestexcept(FE_INVALID | FE_DIVBYZERO);
如果启用任何指定异常的陷阱,则 feraiseexcept 函数会导致一个陷阱。否则,它只设置相应的标志。有关异常陷阱的更多信息,请参见Chapter 4, 异常和异常处理。
fegetexceptflag 和 fesetexceptflag 函数提供了一种简便的方法暂时保存某些标志的状态,并在以后恢复它们。特别地,fesetexceptflag 函数并不导致陷阱;它只恢复指定标志的值。