Completing incomplete types
An array type is completed by specifying the array size
in a following declaration in the same scope
that denotes the same object.
(Also,
when an array without a size is declared and initialized
in the same declaration,
the array has an incomplete type only
between the end of its
declarator
and the end of its initializer.)
An incomplete structure or union type is completed by specifying the content in a following declaration in the same scope for the same tag.