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

Все объявления объекта или функции должны использовать те же имена и ввести спецификаторы

Описание

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

Все объявления объекта или функции должны использовать те же имена и ввести спецификаторы.

Объяснение

Последовательно использующие названия параметра и типы через объявления того же объекта или функции поощряют более сильный ввод. Легче проверять, что тот же функциональный интерфейс используется через все объявления.

Реализация Polyspace

Средство проверки правила обнаруживает ситуации, где названия параметра или типы данных отличаются между многократными объявлениями или объявлением и определением. Средство проверки рассматривает объявления во всех модулях перевода и отмечает проблемы, которые вряд ли будут обнаружены компилятором.

Polyspace® Bug Finder™ и Polyspace Code Prover™ проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам.

Обменивайтесь сообщениями в отчете

  • Определение функционального function_name, несовместимого с его объявлением.

  • Глобальное объявление функции function_name имеет несовместимый тип со своим определением.

  • Глобальное объявление переменной variable_name имеет несовместимый тип со своим определением.

  • Все объявления объекта или функции должны использовать те же имена и ввести спецификаторы.

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

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

Примеры

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

extern int div (int num, int den);

int div(int den, int num) { /* Non compliant */
    return(num/den);
}

В этом примере нарушено правило, потому что названия параметра в объявлении и определении переключаются.

typedef unsigned short width;
typedef unsigned short height;
typedef unsigned int area;

extern area calculate(width w, height h);

area calculate(width w, width h) { /* Non compliant *
    return w*h;
}

В этом примере нарушено правило, потому что второй аргумент функции calculate имеет тип данных:

  • height в объявлении.

  • width в определении.

Правило нарушено даже при том, что базовый тип height и width идентичен.

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

Группа: объявления и определения
Категория: необходимый
Категория AGC: необходимый
Язык: C90, C99

Введенный в R2014b