MISRA C:2012 Rule 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 оператор.

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

Группа: Ресурсы
Категория: Требуемая
Категория AGC: Требуется
Введенный в R2017a