没有明确的类型规范就不能分配给结构
Can't assign to struct without explicit type specification
有了这个定义
struct A {
int x;
};
为什么是
struct A a = {0};
语法有效而
struct A a;
a = {0};
产生错误“'{' 标记前的预期表达式”?
如果我将该行替换为
a = (struct A){0};
那么一切都很好,因此分配给结构不是问题。
花括号语法{}
指定一个初始化列表,这样的列表只能在初始化中使用。
在这种情况下:
struct A a = {0};
a
正在使用 {0}
声明和初始化,并且是有效语法。
这是无效的:
a = {0};
因为这是一个表达式,所以初始化列表不能出现在表达式中。
这个:
a = (struct A){0};
不是强制转换,而是复合文字的一个例子。语法类似于强制转换的语法,但它所做的是创建一个 struct A
类型的对象并为其提供初始化程序。然后将此对象分配给 a
.
您只能在声明中使用初始值设定项,因此语句 a = {0};
无效。
在语句 a = (struct A){0};
中,您实际上是在使用有效的复合文字表达式进行赋值。
有了这个定义
struct A {
int x;
};
为什么是
struct A a = {0};
语法有效而
struct A a;
a = {0};
产生错误“'{' 标记前的预期表达式”?
如果我将该行替换为
a = (struct A){0};
那么一切都很好,因此分配给结构不是问题。
花括号语法{}
指定一个初始化列表,这样的列表只能在初始化中使用。
在这种情况下:
struct A a = {0};
a
正在使用 {0}
声明和初始化,并且是有效语法。
这是无效的:
a = {0};
因为这是一个表达式,所以初始化列表不能出现在表达式中。
这个:
a = (struct A){0};
不是强制转换,而是复合文字的一个例子。语法类似于强制转换的语法,但它所做的是创建一个 struct A
类型的对象并为其提供初始化程序。然后将此对象分配给 a
.
您只能在声明中使用初始值设定项,因此语句 a = {0};
无效。
在语句 a = (struct A){0};
中,您实际上是在使用有效的复合文字表达式进行赋值。