MISRA C++:2008 Rule 19-3-1

Ошибочный индикатор errno не должен использоваться

Описание

Управляйте определением

Ошибочный индикатор errno не должен использоваться.

Объяснение

Наблюдение этого правила поощряет хорошую практику не доверия errno проверять состояние ошибки.

Проверка errno не достаточно, чтобы гарантировать отсутствие ошибок. Функционирует, такие как fopen не может установить errno на состоянии ошибки. Часто, необходимо проверять возвращаемое значение таких функций для состояния ошибки.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

#include <cstdlib>
#include <cerrno>

void func (const char* str) {
    errno = 0;  // Noncompliant
    int i = atoi(str);
    if(errno != 0) { // Noncompliant
        //Handle Error
    }
}

Использование errno нарушает это правило. Функциональный atoi не требуется установить errno если входная строка не может быть преобразована в целое число. Проверка errno позже не охраняет против возможных отказов в преобразовании.

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

Группа: диагностическая библиотека
Категория: необходимый
Введенный в R2013b