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

Данное диагностическое правило основано на руководстве 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-2012-9.4 MISRA-C-2023-9.4