我的结构定义如下:
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},
};
编译器正在进行非法初始化'错误。
根据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},
};
我想知道是否有人对第一个版本无效的原因有任何见解。
感谢。
答案 0 :(得分:0)
这看起来像编译器中的错误。初始化器是正确的,每个C标准允许多个嵌套指示符。在6.7.9最新版本的初始化中有一个例子:
示例11当未经修饰的初始化列表可能被误解时,可以使用指示符提供显式初始化:
struct { int a[3], b; } w[] =
{ [0].a = {1}, [1].a[0] = 2 };
答案 1 :(得分:0)
#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;
}