This diagnostic rule is based on the software development guidelines of MISRA (Motor Industry Software Reliability Association).
This diagnostic rule is relevant only to C-programs. It requires initializers for an aggregate or union to be enclosed in braces. This diagnostic rule can be used for both objects and subobjects.
Exceptions:
Look at the example:
int num[3][2] = { 1, 2, 3, 4, 5, 6 };
The code contains array initializers that are not enclosed in braces. Here is the correct code:
int num[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
Take a look at another example:
struct S1 { char buf; int num[3][2]; } s1[4] = { 'a', { 1, 2 }, { 0, 0 }, { 5, 6 }, 'b', { 1, 2 }, { 0, 0 }, { 5, 6 }, 'c', { 1, 2 }, { 0, 0 }, { 5, 6 }, 'd', { 1, 2 }, { 0, 0 }, { 5, 6 } };
The diagnostic rule requires initializers for an aggregate to also be enclosed in braces. Here is the correct code:
struct S1 { char buf; int num [3][2]; } s1[4] = { { 'a', { { 1, 2 }, { 0, 0 }, { 5, 6 } } }, { 'b', { { 1, 2 }, { 0, 0 }, { 5, 6 } } }, { 'c', { { 1, 2 }, { 0, 0 }, { 5, 6 } } }, { 'd', { { 1, 2 }, { 0, 0 }, { 5, 6 } } } };
Let's take a look at the following case:
struct S2 { char color[8]; int num; } s2[3] = { { "Red", 1 }, { "Green", 2 }, { "Blue", 3 } };
Here, the character literal should also be enclosed in braces. Here is the correct code:
struct S2 { char color[8]; int num; } s2[3] = { { { "Red" }, 1 }, { { "Green" }, 2 }, { { "Blue" }, 3 } };
The example of code with designated initializers looks as follows:
int num[2][2] = { [0][1] = 0, { 0, 1 } };
Here are the examples of code with the initializer of the form '{ 0 }':
int num1[3][2] = { 0 }; int num2[3][2] = { { 1, 2 }, { 0 }, { 5, 6 } }; int num3[2][2] = { { 0 }, [1][1] = 1 };
This diagnostic is classified as:
|