Namespaces
Variants

fegetexceptflag, fesetexceptflag

From cppreference.net
< c ‎ | numeric ‎ | fenv
Definido en el encabezado <fenv.h>
int fegetexceptflag ( fexcept_t * flagp, int excepts ) ;
(1) (desde C99)
int fesetexceptflag ( const fexcept_t * flagp, int excepts ) ;
(2) (desde C99)

1) Intenta obtener el contenido completo de las banderas de excepción de punto flotante que se enumeran en el argumento de máscara de bits excepts , que es un OR bit a bit de las macros de excepción de punto flotante .

2) Intenta copiar el contenido completo de las banderas de excepción de punto flotante que se enumeran en excepts desde flagp hacia el entorno de punto flotante. No genera ninguna excepción, solo modifica las banderas.

El contenido completo de una bandera de excepción de punto flotante no es necesariamente un valor booleano que indique si la excepción está activada o desactivada. Por ejemplo, puede ser una estructura que incluya el estado booleano y la dirección del código que activó la excepción. Estas funciones obtienen todo dicho contenido y lo obtienen/almacenan en flagp en formato definido por la implementación.

Contenidos

Parámetros

flagp - puntero a un objeto fexcept_t donde las banderas serán almacenadas o leídas
excepts - máscara de bits que lista las banderas de excepción a obtener/establecer

Valor de retorno

0 en caso de éxito, distinto de cero en caso contrario.

Ejemplo

#include <stdio.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
    printf("current exceptions raised: ");
    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");
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none");
    printf("\n");
}
int main(void)
{
    fexcept_t excepts;
    /* Configurar un conjunto "actual" de banderas de excepción. */
    feraiseexcept(FE_INVALID);
    show_fe_exceptions();
    /* Guardar las banderas de excepción actuales. */
    fegetexceptflag(&excepts,FE_ALL_EXCEPT);
    /* Activar temporalmente otras dos excepciones. */
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_OVERFLOW | FE_INEXACT);
    show_fe_exceptions();
    /* Restaurar las banderas de excepción anteriores. */
    fesetexceptflag(&excepts,FE_ALL_EXCEPT);
    show_fe_exceptions();
    return 0;
}

Salida:

current exceptions raised: FE_INVALID
current exceptions raised: FE_INEXACT FE_OVERFLOW
current exceptions raised: FE_INVALID

Referencias

  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.6.2.2 La función fegetexceptflag (p: 210)
  • 7.6.2.4 La función fesetexceptflag (p: 211)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.6.2.2 La función fegetexceptflag (p: 191)
  • 7.6.2.4 La función fesetexceptflag (p: 192)

Véase también

Documentación de C++ para fegetexceptflag , fesetexceptflag