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

V2612. MISRA. Array element should not be initialized more than once.

09 Сен 2021

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

Это правило актуально только для С. Язык C имеет специальный синтаксис инициализирующих выражений, называемый designated initializer. Он позволяет инициализировать элементы массива или структуры в произвольном порядке.

Например, можно инициализировать конкретные элементы массива:

int arr[4] = {
  [1] = 1,
  [3] = 2,
};

Этот синтаксис работает и для структур:

struct point
{
  int x;
  int y;
};

struct point pt1 = {
  .x = 1,
  .y = 1,
};

Однако при его использовании можно допустить ошибку и инициализировать один и тот же элемент дважды:

int arr[4] = {
  [3] = 1,
  [3] = 2,
};

struct point pt1 = {
  .x = 1,
  .x = 1,
};

MISRA запрещает данную конструкцию, т.к. стандарт языка не определяет, должны ли проявляться побочные эффекты в данной ситуации или нет. Скорее всего, такая ситуация возникла из-за опечатки.

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

  • MISRA-C-9.4