exponenta event banner

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

Функция должна иметь единственную точку выхода в конце

Описание

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

Функция должна иметь единственную точку выхода в конце.

Объяснение

Это правило требует, чтобы return оператор должен быть последним оператором в теле функции. В противном случае могут возникнуть следующие проблемы:

  • Код, следующий за return оператор может быть непреднамеренно опущен.

  • Если функция, изменяющая некоторые из ее аргументов, имеет ранний return утверждения, при чтении кода не сразу ясно, какие изменения на самом деле происходят.

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

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

Примеры

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

#define MAX ((unsigned int)2147483647)
#define NULL (void*)0

typedef unsigned int bool_t;
bool_t false = 0;
bool_t true = 1;

bool_t f1(unsigned short n, char *p) {          /* Non-compliant */
    if(n > MAX) {
        return false;
    }

    if(p == NULL) {
        return false;
    }

    return true;
}

В этом примере правило нарушается, поскольку существует три return заявления.

Коррекция - использование переменной для сохранения возвращаемого значения

Одной из возможных корректировок является сохранение возвращаемого значения в переменной и возврат этой переменной непосредственно перед окончанием функции.

#define MAX ((unsigned int)2147483647)
#define NULL (void*)0

typedef unsigned int bool_t;
bool_t false = 0;
bool_t true = 1;
bool_t return_value;

bool_t f2 (unsigned short n, char *p) {         /* Compliant */
    return_value = true;
    if(n > MAX) {
        return_value = false;
    }

    if(p == NULL) {
        return_value = false;
    }

    return return_value;
}

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

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