﻿# V2641\. MISRA\. Types should be explicitly specified\.

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

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

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

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

```cpp
// 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` не совпадают\.

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

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

extern void *my_malloc (size_t n);
```

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

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

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

```cpp
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
```