error: missing braces around initializer [-Werror=missing-braces]
时间: 2023-08-30 21:06:17 浏览: 95
这个错误提示是因为在使用结构体初始化语法时,有的编译器要求必须使用大括号将初始化值括起来,以避免歧义。
例如,下面的代码就会出现这个错误:
```c
struct point {
int x, y;
};
int main() {
struct point p = {1, 2, 3}; // 错误:缺少大括号
return 0;
}
```
正确的初始化方式应该是:
```c
struct point {
int x, y;
};
int main() {
struct point p = {1, 2}; // 正确
return 0;
}
```
如果需要初始化结构体中的某个成员变量中的结构体或联合体类型的变量,也需要使用大括号将其括起来,例如:
```c
struct address {
char street[50];
char city[20];
char state[20];
int zip_code;
};
struct person {
char name[20];
int age;
struct address addr;
};
int main() {
struct person p = {"Tom", 20, {"Main St", "New York", "NY", 10001}}; // 正确
return 0;
}
```
需要注意的是,使用大括号初始化结构体时,必须按照结构体定义的顺序初始化,不能跳过某些成员变量。同时,使用大括号初始化数组时,也需要按照数组定义的顺序初始化。