MISRA C:2012 Rule 8.5

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

Описание

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

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

Внешний объект или функция объявляются один раз в одном и только в одном файле.

Объяснение

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

  • Декларация и определение.

  • Объявления в различных модулях перевода.

Правило применяет практику объявления внешних объектов или функций в файлах заголовков.

Реализация Polyspace

Проверка правил проверяет только явные extern объявления (предварительные определения игнорируются). Шашка помечает объявленные переменные или функции extern в файле без заголовка.

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

Дополнительное сообщение в отчете

  • Объектные object_name имеет внешние объявления в нескольких файлах.

  • Функциональные function_name имеет внешние объявления в нескольких файлах.

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

Заголовочный файл:

/* file.h */
extern int var;
extern void func1(void);   /* Compliant */

Исходный файл:

/* file.c */
#include "file.h"

extern void func2(void);   /* Non compliant */

/* Definitions */
int var = 0;
void func1(void) {}
В этом примере объявление внешней функции func2 не совместим, поскольку это происходит в файле без заголовка. Другие объявления внешних объектов и функций происходят в заголовочном файле и соответствуют этому правилу.

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

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