MISRA C:2012 Rule 8.3

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

Описание

Это средство проверки деактивировано в Polyspace® по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (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