V2540. MISRA. Arrays should not be partially initialized.


This diagnostic rule is based on the software development guidelines developed by MISRA (Motor Industry Software Reliability Association).

If one or several array items are initialized explicitly, all the items have to be explicitly initialized as well.

When initializing using the list in curly braces, all uninitialized items will be initialized by default (for example, by zero). Explicit initialization of each item ensures that all items have been assigned the expected value.

Exceptions:

  • You may use the form { 0 }, because it clearly indicates that all the items are initialized with zero.
  • The array initialized with a single string literal does not require explicit initializer for each element.
  • You can partially initialize an array if only designated-initializers are used.

A few examples that violate the rule:

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 }; 

Here are some correct examples:

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 };

Bugs Found

Checked Projects
364
Collected Errors
13 504