feraiseexcept
函数(C++11) <cfenv>
int feraiseexcept (int excepts);
触发浮点异常
尝试引发由excepts指定的浮点异常。
如果指定了多个异常,则它们被引发的顺序是不指定的。
调用此函数的程序应确保为调用启用了编译指示
FENV_ACCESS。
☲ 参数
excepts
位掩码:实现支持的任意数量浮点异常值的组合(按位或 OR):
某些库实现可能支持更多的浮点异常值(其对应的宏也以FE_开头)。
C99:
在<fenv.h>中,库可以只定义它们支持的上面的宏值(其他的可能不定义)。
C++11:
至少上面所有的宏值都在<cfenv>中定义(即使实现不支持)。
☉ 返回值
如果exception中的所有异常都被成功引发(或者exception为零),则为零。
否则为非零值。
☣ 示例
/* feraiseexcept example */
#include <stdio.h> /* printf */
#include <fenv.h> /* feraiseexcept, fetestexcept, FE_ALL_EXCEPT, FE_INVALID */
#pragma STDC FENV_ACCESS on
double fn (double x) { /* some function for which zero is a domain error */
if (x==0.0) feraiseexcept(FE_INVALID);
return x;
}
int main ()
{
feclearexcept (FE_ALL_EXCEPT);
fn (0.0);
if (fetestexcept(FE_INVALID)) printf ("FE_INVALID raised\n");
return 0;
}
|
可能输出:
FE_INVALID raised
↭ 数据竞争
每个线程使用自己的状态维护一个单独的浮点环境。如果生成一个新线程就复制当前状态。[这适用于C11和c++ 11实现]
➤ 异常
无抛出保证:此函数不会抛出异常。注意,C浮点异常不是c++异常,因此不会被try/catch块捕获。
🍄 另请参阅