﻿# V2615\. MISRA\. A compatible declaration should be visible when an object or function with external linkage is defined\.

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

Это правило актуально только для С\. Не рекомендуется определять объекты и/или функции с внешним связыванием \(external linkage\) без предварительной декларации\.

Смысл этого правила в том, чтобы избегать "ручного" использования внешних сущностей в местах, где они нужны\. Декларации внешних объектов и функций стоит делать в заголовочном файле\.

Например, следующий код определяет внешнюю переменную и функцию без предварительной декларации:

```cpp
int foo;
void bar(void) {
  // ....
}
```

Декларации стоит поместить в заголовочный файл\. Также стоит включить заголовочный файл в компилируемый:

```cpp
// file.h
extern int foo;
extern void bar(void);

// file.c
#include "file.h"
int foo;
void bar(void) {
  // ....
}
```

Для объектов и функций с внутренним связыванием \(internal linkage\) предварительная декларация не нужна:

```cpp
static int baz;
static void qux(void) {
  // ....
}
```