﻿# V2622\. MISRA\. External object or function should be declared once in one and only one file\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Это правило актуально только для С\. У любого объекта или функции с внешним связыванием должно быть ровно одно объявление\. 

Рассмотрим пример нарушения этого правила:

```cpp
/* 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'\. 

Здесь возможно несколько вариантов исправления:

1. Может оказаться, что в файле 'some\.cpp' один из заголовочных файлов не нужен, и тогда его включение можно убрать\. 
1. Возможно, что объявление переменной 'var' в одном из заголовочных файлов является лишним, и его можно убрать\.
1. Можно объявить переменную 'var' в более обобщенном заголовочном файле и включить его везде, где используется эта переменная:

```cpp
/* 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"
```