假设我有一个标签完全定义的结构MyStruct
,并假设x, y, ..., z
是允许值的字段。 为什么是
struct MyStruct q = {x,y,..,z};
允许的,但
struct MyStruct q;
q = {x,y,...,z};
不被允许? 我觉得这很烦人。 在第二种情况下,在这里我先前已宣布q
,我需要通过一个一个值分配给每个字段,一个:
q.X = x; q.Y = y; ... q.Z = z;
其中, X, Y, ..., Z
是领域MyStruct
。 是否有背后的原因呢?
你要找的是文字的化合物。 这是加入到C99的语言。
你的第一种情况:
struct MyStruct q = {x,y,..,z};
是一个语法特定的初始化。 你的第二个情况下,在语言的pedantics没有初始化,但分配。 赋值的右边必须是正确的类型的结构。 此前C99有一个在语言没有语法来写一个结构的文本,这是你正在尝试做的。 {X,Y,...,Z}看上去像内的表达的块。 如果一个人的启发,试图把它作为一个字面值,虽然语言都没有,一个也不能肯定它的类型。 (在你的背景,你可以做一个很好的猜测。)
为了让这个和解决的问题类型,C99加入语法,所以你可以这样写:
q = (struct MyStruct){x,y,...,z};
你可以这样做,但你需要你的前总供给结构的类型:
struct MyStruct q;
q = (struct MyStruct){x,y,...,z};