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

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

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

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

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

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

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

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

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

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

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

Данная диагностика классифицируется как:

MISRA-C-2012-8.4 MISRA-C-2023-8.4