AUTOSAR C++14 Rule M8-5-2
Braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures
Description
Rule Definition
Braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures.
Rationale
The use of nested braces in initializer lists to match the structures of nested objects
        in arrays, unions, and structs encourages you to consider the order of initialization of
        complex data types and makes your code more readable. For example, the use of nested braces
        in the initialization of ex1 makes it easier to see how the nested arrays
          arr1 and arr2 in struct ex1 are
        initialized.
struct Example
{
    int num;
    int arr1[2];
    int arr2[3];
};
//....
struct Example ex1 {1, {2, 3}, {4, 5, 6}}; //CompliantThe rule does not require the use of nested braces if you zero initialize an array, a union, or a struct with nested structures are the top-level, for instance:
struct Example ex1 {}; //CompliantPolyspace Implementation
If you non-zero initialize an array, union, or struct that contains nested structures
        and you do not use nested braces to reflect the nested structure, Polyspace® flags the first element of the first nested structure in the initializer list.
        For instance, in this code snippet, Polyspace flags the number 2 because it corresponds to the first
        element of nested structure arr1 inside struct
        ex1.
struct Example
{
    int num;
    int arr1[2];
    int arr2[3];
};
//....
struct Example ex1 {1, 2, 3, 4, 5, 6}; // Non-compliantPolyspace does not report violations of this rule on containers implemented by the standard template library (STL).
If you zero-initialize an array or an structure, initialize only the first element to
        zero or NULL. Partially initializing an array or a structure to non-zero
        value and relying on implicit zero initialization for the rest of the object results in a
        violation. For example, in this code, the partial initializations are reported as
        violations:
int16_t array[5] = {1,2,3}; //Noncompliant
int8_t map[2][2] = {{},{1,1}}; //NoncompliantTroubleshooting
If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
| Group: Declarators | 
| Category: Required, Automated |