有人能给我解释一下这个C结构语法吗



我在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,这让我认为这是一种新的语法。

最新更新