fegetexceptflag, fesetexceptflag
|
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
|