exponenta event banner

MISRA C:2012 Правило 21.12

Функции обработки исключений <fenv.h> не следует использовать

Описание

Определение правила

Функции обработки исключений <fenv.h> не следует использовать.

Объяснение

В некоторых случаях значения флагов состояния с плавающей запятой не указаны. Попытки доступа к ним могут привести к неопределенному поведению.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

#include <fenv.h>

void func(float x, float y) {
    float z;

    feclearexcept(FE_DIVBYZERO);              /* Non-compliant */ 
    z = x/y;

    if(fetestexcept (FE_DIVBYZERO))  {        /* Non-compliant */ 
    }
    else {
#pragma STDC FENV_ACCESS ON
        z=x*y;
        if(z>x) {
#pragma STDC FENV_ACCESS OFF
            if(fetestexcept (FE_OVERFLOW)) {  /* Non-compliant */ 
            }
        }
    }
}

В этом примере правило нарушается, когда идентификаторы feclearexcept и fetestexceptи макросы FE_DIVBYZERO и FE_OVERFLOW используются.

Проверить информацию

Группа: Стандартные библиотеки
Категория: Консультационные услуги
СМЖЛ Категория: Консультативные услуги
Представлен в R2015b