初始化C结构中的一个成员以获取结构元素数组

时间:2018-07-09 08:37:45

标签: c struct initialization

我有以下代码旨在初始化成员b。所有MAX_SIZE结构都应该发生这种情况。

enum { MAX_SIZE = 10 };

struct some
{
    int a, b;
}
many[MAX_SIZE] = { {.b = 5} };

int main() 
{
    int i;

    for (i = 0; i < MAX_SIZE; i++)
    {
        printf("%d, %d\n", many[i].a, many[i].b);
    }
}

我需要输出看起来像:

0, 5
0, 5
0, 5
... (10 times)

但是,实际输出是:

0, 5
0, 0
0, 0
... (10 times)

如何在不需要显式的for循环来分配值的情况下获得所需的输出?我知道在C ++中,这是通过仅提供用于初始化b的结构的构造函数来实现的。

1 个答案:

答案 0 :(得分:2)

这不是C标准,但是您可以使用此gcc extension来做到这一点:

struct some many[10] = { [0 ... 9].b = 5 };

它也可以与 clang >= 5 一起使用。