在结构元素数组的C结构中仅初始化一个成员



我有以下代码,目的是初始化成员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, %dn", 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的结构提供构造函数来实现的。

这不是C标准,但有了这个gcc扩展,你可以做到这一点:

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

它也适用于clang >= 5

最新更新