exponenta event banner

MISRA C:2012 Правило 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 идентичны.

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

Группа: Объявления и определения
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2014b