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

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

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

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

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

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

```cpp
struct point
{
  int x;
  int y;
};

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

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

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

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

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