MISRA C++:2008 Rule 8-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}}; //Compliant
The 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 {}; //Compliant
Polyspace 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-compliant
Polyspace does not report violations of this rule on containers implemented by the standard template library (STL).
Troubleshooting
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 |