MISRA C:2012 Rule 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