当前位置: C语言 -- 标准库 -- <fenv.h> -- fegetexceptflag

fegetexceptflag函数


概要:
#include <fenv.h>
int fegetexceptflag(fexcept_t *flagp, int excepts);

描述:

该函数尝试将参数excepts指定的浮点状态标志的实现定义形式存储到参数flagp指向的对象中。

函数fetestexceptferaiseexceptfeclearexcept支持设置或者清除浮点状态标志的基本抽象。具体实现中,浮点状态标志可能包含更多信息,例如:首次引发浮点异常的代码地址;函数fegetexceptflagfesetexceptflag能够处理浮点状态标志的全部内容。


参数:
fexcept_t *flagp

参数为一个指向fexcept_t类型对象的指针。

int excepts

参数为位掩码值,表示浮点异常的子集,可以是0,也可以是一个或者多个实现支持的浮点异常宏的按位或运算值(例如:FE_OVERFLOW|FE_INEXACT)。如果参数是其它值,函数行为是未定义的。


返回值:

如果参数excepts指定的浮点状态标志的实现定义形式成功存储,函数返回0;否则函数返回一个非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
/*函数fegetexceptflag范例*/

#include <fenv.h>
#include <math.h>
#include <stdio.h>

#pragma STDC FENV_ACCESS ON

void showExceptions(void)
{
    printf("Exceptions: ");
    /*判断是否设置浮点异常。*/
    if(fetestexcept(FE_ALL_EXCEPT)==0)
    {
        puts("No floating-point status flag is set.");
    }
    else
    {
    	/*判断设置的浮点异常。*/
        if(fetestexcept(FE_DIVBYZERO))
            printf("FE_DIVBYZERO ");
        if(fetestexcept(FE_INEXACT))
            printf("FE_INEXACT ");
        if(fetestexcept(FE_INVALID))
            printf("FE_INVALID ");
        if(fetestexcept(FE_OVERFLOW))
            printf("FE_OVERFLOW ");
        if(fetestexcept(FE_UNDERFLOW))
            printf("FE_UNDERFLOW ");
        puts("");
    }
}

int main(void)
{
    fexcept_t flagp;

    feclearexcept(FE_ALL_EXCEPT);
    double result = exp(1000.0);
    showExceptions();
    fegetexceptflag(&flagp,FE_ALL_EXCEPT);

    feclearexcept(FE_ALL_EXCEPT);
    fesetexceptflag(&flagp,FE_ALL_EXCEPT);
    showExceptions();

    return 0;
}


输出:

Exceptions: FE_INEXACT FE_OVERFLOW

Exceptions: FE_INEXACT FE_OVERFLOW

在这个例子中,先通过double result = exp(1000.0);语句生成了两个异常FE_INEXACTFE_OVERFLOW;然后将这两个异常保存到变量flagp中;最后通过fesetexceptflag语句重新设置了异常标志。


相关内容:
feclearexcept 清除浮点异常的函数。
feraiseexcept 引发浮点异常的函数。
fesetexceptflag 设置浮点异常标志的函数。
fetestexcept 测试浮点异常的函数。