fegetexceptflag, fesetexceptflag
|
Определено в заголовочном файле
<fenv.h>
|
||
|
int
fegetexceptflag
(
fexcept_t
*
flagp,
int
excepts
)
;
|
(1) | (начиная с C99) |
|
int
fesetexceptflag
(
const
fexcept_t
*
flagp,
int
excepts
)
;
|
(2) | (начиная с C99) |
1) Пытается получить полное содержимое флагов исключений с плавающей точкой, перечисленных в аргументе-битовой маске
excepts
, который представляет собой побитовое ИЛИ
макросов исключений с плавающей точкой
.
2) Пытается скопировать полное содержимое флагов исключений с плавающей запятой, перечисленных в
excepts
из
flagp
в окружение с плавающей запятой. Не вызывает никаких исключений, только изменяет флаги.
Полное содержимое флага исключения с плавающей запятой не обязательно является булевым значением, указывающим, возбуждено исключение или сброшено. Например, это может быть структура, включающая булев статус и адрес кода, вызвавшего исключение. Эти функции получают всё такое содержимое и сохраняют/извлекают его в
flagp
в определяемом реализацией формате.
Содержание |
Параметры
| flagp | - | указатель на объект fexcept_t , в который будут сохранены или из которого будут прочитаны флаги |
| excepts | - | битовая маска, перечисляющая флаги исключений для получения/установки |
Возвращаемое значение
0 при успешном выполнении, иначе ненулевое значение.
Пример
#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; /* Setup a "current" set of exception flags. */ feraiseexcept(FE_INVALID); show_fe_exceptions(); /* Save current exception flags. */ fegetexceptflag(&excepts,FE_ALL_EXCEPT); /* Temporarily raise two other exceptions. */ feclearexcept(FE_ALL_EXCEPT); feraiseexcept(FE_OVERFLOW | FE_INEXACT); show_fe_exceptions(); /* Restore previous exception flags. */ fesetexceptflag(&excepts,FE_ALL_EXCEPT); show_fe_exceptions(); return 0; }
Вывод:
current exceptions raised: FE_INVALID current exceptions raised: FE_INEXACT FE_OVERFLOW current exceptions raised: FE_INVALID
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.6.2.2 Функция fegetexceptflag (стр. 210)
-
- 7.6.2.4 Функция fesetexceptflag (стр. 211)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.6.2.2 Функция fegetexceptflag (стр. 191)
-
- 7.6.2.4 Функция fesetexceptflag (стр. 192)
Смотрите также
|
Документация C++
для
fegetexceptflag
,
fesetexceptflag
|