Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для С. У любого объекта или функции с внешним связыванием должно быть ровно одно объявление.
Рассмотрим пример нарушения этого правила:
/* lib1.h */
extern int32_t var; // Declaration
/* lib2.h */
extern int32_t var; // Declaration
/* some.cpp */
#include "lib1.h"
#include "lib2.h"
В данном примере переменная 'var' объявлена дважды: в 'lib1.h' и 'lib2.h'.
Здесь возможно несколько вариантов исправления:
/* lib.h */
extern int32_t var; // Declaration
/* lib1.h */
#include "lib.h"
/* lib2.h */
#include "lib.h"
/* some.cpp */
#include "lib1.h"
#include "lib2.h"
Данная диагностика классифицируется как:
|