Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08
Данное диагностическое правило основано на руководстве 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));
}
Диагностическое правило классифицируется как:
|
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: