MISRA C:2012 Rule 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;
}

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

Группа: Поток управления
Категория: консультация
Категория AGC: консультация

Введенный в R2014b