我在gnu-gcc官方网站上发现,他们初始化的结构如下:
struct f1 {
int x; int y[];
} f1 = { 1, { 2, 3, 4 } };
struct f2 {
struct f1 f1; int data[3];
} f2 = { { 1 }, { 2, 3, 4 } };
起初,我认为这是结构的默认初始化,但我测试了它,它在声明时不会自动初始化结构,所以使用它有什么意义(当然,我用gcc编译了我的程序(。
我试过的代码:
#include <stdio.h>
struct a{
int x;
int y;
} a = {42, 42};
int main(void)
{
struct a foo;
printf("%dn%dn", foo.x, foo.y);
return (0);
}
它输出随机的未初始化数据,而不是
42
42
您的困惑似乎源于您不理解语法的事实。
struct f1 {
int x; int y[];
} f1 = { 1, { 2, 3, 4 } };
定义一个名为f1
的变量,并初始化其成员。
在您的示例中,您还有一个在全局作用域中初始化的变量a
,但在main
作用域中也有相同的未初始化变量a
。
我误解了,这相当于struct f1 f1 = { 1, {2, 3, 4}};
,事实上他们使用了相同的名称f1
,这让我认为这是一种新的语法。