Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C.
Передача в функции memcpy, memmove и memcmp аргументов-указателей на разные, несовместимые между собой типы может сигнализировать об ошибке.
Рассмотрим пример кода:
void foo(int s1[CMP_SIZE], float s2[CMP_SIZE])
{
memcpy(s1, s2, CMP_SIZE * sizeof(int));
}
В этом примере аргументы функции memcpy имеют разные типы: s1 — int *, а s2 — float *. Примечание: несмотря на то, что параметры s1 и s2 задекларированы как массивы, в силу специфики языка C на самом деле они являются указателями.
Корректный код выглядит так:
void foo(int s1[CMP_SIZE], int s2[CMP_SIZE])
{
memcpy(s1, s2, CMP_SIZE * sizeof(int));
}
Данная диагностика классифицируется как:
|