﻿# V2540\. MISRA\. Arrays should not be partially initialized\.

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

Если один или несколько элементов массива инициализируются явно, то все элементы должны быть также явно инициализированы\.

При инициализации с помощью списка в фигурных скобках все неинициализированные элементы будут инициализированы по умолчанию \(например, нулем\)\. Обеспечение явной инициализации каждого элемента гарантирует, что всем элементам было присвоено желаемое значение\.

Исключения:

1. Разрешается использование формы \{ 0 \}, так как она явно указывает, что все элементы инициализируются нулем\.
1. Массив, инициализированный единственным строковым литералом не нуждается в явном инициализаторе для каждого элемента\.
1. Можно частично инициализировать массив, если используются только [designated\-инициализаторы](https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html)\.

Несколько примеров, нарушающих правило: 

```cpp
int White[4] = { 0xffff };
int RGBwhite[4]  = { 0xffff, 0xffff, 0xffff };

char *a3[100] = { "string", "literals" };
char hi[5] = { 'H', 'i', '!' };

int designated_butNotAll[4] = { [0] = 3,[1] = 1, 0 };
```

И несколько корректных:

```cpp
char lpszTemp[5] = { '\0' };

char a1[100] = "string_literal";
char a2[100] = { "string_literal" };

int Black[4] = { 0 };
int CMYKwhite[4] = { 0, 0, 0, 0 };
int CMYKblack[4] = { 0xffff, 0xffff, 0xffff, 0xffff };

int designated_All[4] = { [0] = 3,[1] = 1,[2] = 4 };
```