用数组作为c中结构的元素初始化一个strucuters数组

Initializing an array of strucuters with an array as an element of the structure in c

我的结构定义如下:

typedef struct simpleStruct {
    int a[2];
    int b;
    int c;
} simpleStruct;

我正在尝试使用以下方法初始化它:

simpleStruct simpleTable[] = {
    {.a[0]= 0, .a[1]= 1, .b = 2, .c = 3},
    {.a[0]= 4, .a[1]= 5, .b = 6, .c = 7},
};

编译器抛出 'illegal initialization' 错误。

根据 C99 规范,这应该允许通过指定的初始化程序 (http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html)

我尝试了其他几种初始化它的方法,发现这行得通:

simpleStruct simpleTable[] = {
    {.a = {0,1}, .b = 2, .c = 3},
    {.a = {4,5}, .b = 6, .c = 7},
};

我想知道是否有人知道为什么第一个版本不起作用。

谢谢。

这看起来像是您的编译器中的错误。初始值设定项是正确的,根据 C 标准允许多个嵌套指示符。在 6.7.9 最新版本的初始化部分有一个例子:

EXAMPLE 11 当未修饰的初始化列表可能被误解时,指示符可用于提供显式初始化:

  struct { int a[3], b; } w[] =
        { [0].a = {1}, [1].a[0] = 2 };

    #include<stdio.h>

    typedef struct simpleStruct {
        int a[2];
        int b;
        int c;
    } simpleStruct;

    int main()
    {
        simpleStruct anObj[]={{{23,30},40,39},{{20,90},20,19}};
        printf("%d, %d, %d, %d\n", anObj[0].a[0], anObj[0].a[1], anObj[0].b, anObj[0].c);
        printf("%d, %d, %d, %d\n", anObj[1].a[0], anObj[1].a[1], anObj[1].b, anObj[1].c);
        return 0;
    }