exponenta event banner

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

Значение errno должны проверяться только в том случае, если последней вызываемой функцией была errno-настройка функции

Описание

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

Значение errno должны проверяться только в том случае, если последней вызываемой функцией была errno- функция установки.

Это правило основано на MISRA C ®: 2012 Поправка 1.

Объяснение

Кроме errno-настройка функций, стандарт не применяет этот набор других функций errno об ошибках. Установлены ли эти функции errno зависит или нет от реализации.

Обнаружение ошибок при проверке errno только действительность этой проверки также становится зависимой от реализации. В реализациях, которые не требуют errno установка, даже если вы проверяете errno в одиночку можно игнорировать условия ошибки.

Для списка errno-установочные функции, см. MISRA C:2012 Rule 22.8.

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

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

Примеры

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

#include <stddef.h>
#include <stdlib.h>

typedef double float64_t;

void f(void)
{
    float64_t f64;
    errno = 0;
    f64 = atof("A.12");
    if (0 == errno) { /* Non-compliant */
    }
    errno = 0;
    f64 = strtod("A.12", NULL);
    if (0 == errno) { /* Compliant */
    }
}

В этом примере:

  • Первое if оператор несовместим, поскольку atof может или не может быть установлен errno при обнаружении ошибки. f64 может не иметь допустимого значения в этом if заявление.

  • Второе if оператор соответствует, потому что strtod является errno- функция установки. f64 будет иметь допустимое значение в пределах этого if заявление.

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

Группа: Ресурсы
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2017a