MISRA C:2012 Rule 8.3

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

Описание

Эта проверка деактивирована в Polyspace по умолчанию® по мере анализа You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (Polyspace Bug Finder Access).

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

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

Объяснение

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

Реализация 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: Требуется
Введенный в R2014b