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;
}

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

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