e.J*_*mes 2 c struct nested initialization
我有一组结构,定义如下:
typedef struct
{
int index;
int array[10];
}
Item;
typedef struct
{
Item A;
Item B;
Item C;
}
Collection;
Run Code Online (Sandbox Code Playgroud)
我想声明一个类型的变量,Collection
如下所示:
Collection collection =
{
{ 1, 0 }, /* item A */
{ 2, 0 }, /* item B */
{ 3, 0 } /* item C */
};
Run Code Online (Sandbox Code Playgroud)
这会将三个index
变量设置为1,2和3,同时将所有三个array[]
变量初始化为零吗?
它似乎正在我的编译器上工作,但我想知道这是否是标准行为.
零周围应该有额外的大括号,以使它们成为有效的数组初始值设定项:
Collection collection =
{
{ 1, {0} }, /* item A */
{ 2, {0} }, /* item B */
{ 3, {0} } /* item C */
};
Run Code Online (Sandbox Code Playgroud)
除此之外,它将正确初始化结构.
inizializer在没有附加大括号的情况下也是有效的,但是如果明确了子聚合的初始化程序,那么您将获得编译器警告并且更加容易混淆.有关详细信息,请参阅C99标准中的6.7.8部分,该部分在答案中特别提到,特别是6.7.8(20)和6.7.8(29)中的例子.