Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2549. MISRA. Pointer to FILE should...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2549. MISRA. Pointer to FILE should not be dereferenced.

18 Июн 2019

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

Это правило справедливо только для C. Указатель на стандартный тип FILE не должен быть явно или неявно разыменован. Копирование этого объекта бессмысленно, т. к. копия не даст того же самого поведения. Прямое управление объектом FILE запрещено, т. к. может быть несовместимо с дизайном, который принят для работы с потоками (stream) управления файлами.

Явное разыменование подразумевает обычное разыменование специально отведенными для этого операторами:

  • *p;
  • p->_Placeholder;
  • p[0];

Неявное разыменование - вызов функции, которая внутри себя разыменовывает указатель, например, 'memcpy' или 'memcmp'.

Пример кода, на котором анализатор выдаст предупреждения:

void foo()
{
  FILE *f = fopen(....);
  FILE *d = fopen(....);
  ....
  if (memcmp(f, d, sizeof(FILE)) == 0) { .... } // <=
  memset(d, 0, sizeof(*d));                     // <=
  *d = *f;                                      // <=
  ....
}

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

  • MISRA-C-22.5