...
but it is also possible to use designators to initialize array elements in a noncontiguous fashion. Section Subclause 6.7.9, Example 12, of the C Standard [ISO/IEC 9899:2011] states:
Space can be "allocated" from both ends of an array by using a single designator:
Code Block int a[MAX] = { 1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0 };In the above, if
MAX
is greater than ten, there will be some zero-valued elements in the middle; if it is less than ten, some of the values provided by the first five initializers will be overridden by the second five.
The C Standard also dictates how array initialization is handled when the number of initialization elements does not equal the explicit array bound. Section Subclause 6.7.9, paragraphs 21 and 22, statesstate:
If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
If an array of unknown size is initialized, its size is determined by the largest indexed element with an explicit initializer. The array type is completed at the end of its initializer list.
...
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
|
|
| |||||||
| CC2.ARR02 | Fully implemented | |||||||
| 127 S | Partially implemented | |||||||
PRQA QA-C |
| 0684 (C) | Fully implemented |
...
CERT C++ Secure Coding Standard | ARR02-CPP. Explicitly specify array bounds, even if implicitly defined by an initializer |
MITRE CWE | CWE-665, Incorrect or incomplete initialization |
Bibliography
[ISO/IEC 9899:2011] | Section Subclause 6.7.9, "Initialization" |
...