在写C/C++代码时通常随手声明的struct如下:
struct test{
char name[16];
int id;
unsigned int number;
};
此后在使用该结构体创建数组时写成如下代码:
struct test Students[] = {
[0] = {
.name = "ddds",
.id = 0,
.number = 21212
},
[1] = {
.name = "sadj",
.id = 1,
.number = 122233
}
};
但是,在编译时会如下错误:
error c99 designator ‘name’ outside aggregate initializer
有两种解决方案:
1. 修改初始化方法
struct test Students[] = {
[0] = {
"ddds",
0,
21212
},
[1] = {
"sadj",
1,
122233
}
};
这样修改就不会报错了,但是不便于阅读。
2. 修改结构体声明方法
该方法取自内核中的写法
struct test{
const char *name;
//char name[16];
int id;
unsigned int number;
};
将字符数组改成字符指针,即可规避上述问题。