# V2641. MISRA. Types should be explicitly specified.

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

Это правило актуально только для С.

Язык С позволяет объявлять сущности без явного указания типа. По стандарту считается, что в таком случае тип сущности будет `int`. Использование такой особенности языка может привести к путанице или ошибке.

Рассмотрим пример:

    // TU1.c
    #include <stddef.h>
    void *my_malloc (size_t n) { /* Implementation */ }

    // TU2.c
    #include <stddef.h>

    extern my_malloc (size_t n);

В файле `TU1.c` происходит определение аллоцируещей функции `my_malloc`, которая принимает размер в байтах и возвращает указатель на выделенную память. Для её использования в файле `TU2.c` программист вручную написал предварительную декларацию функции, но забыл указать возвращаемый тип. Компилятор в таком случае предполагает, что функция возвращает `int`. Это может привести к ошибкам на этапе работы программы в том случае, если размер указателя и размер `int` не совпадают.

Чтобы исправить ошибку, необходимо указать тип данных:

    // TU2.c
    #include <stddef.h>

    extern void *my_malloc (size_t n);

Анализатор также формирует предупреждения на следующие объявления сущностей:

    extern var1; // variable declaration of 'int' type
    func1() {}   // function declaration with the no return type
    static var2; // variable declaration of 'double' type

Исправленные примеры:

    extern int var1;    // variable declaration of 'int' type
    void func1() {}     // function declaration with the no return type
    static double var2; // variable declaration of 'double' type

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

MISRA-C-2023-8.1