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
Данная диагностика классифицируется как:
|