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

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

Описание

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

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

Объяснение

Это правило требует, чтобы оператор 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;
}

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

Группа: Поток управления
Категория: консультация
Категория AGC: консультация
Язык: C90, C99

Введенный в R2014b