假设我有一个带有标记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
的字段。这背后有什么原因吗?
发布于 2012-08-30 12:06:29
您要查找的是一个复合文字。这是在C99中添加到语言中的。
你的第一个案例:
struct MyStruct q = {x,y,..,z};
是特定于初始化的语法。第二种情况,在语言的技巧中,不是初始化,而是赋值。赋值的右侧必须是正确类型的结构。在C99之前,语言中没有用来编写结构文字的语法,而这正是您正在尝试做的。{x,y,..,z}看起来像一个内部有表达式的块。如果有人试图将其视为字面值,但语言并非如此,那么就无法确定它的类型。(在您的上下文中,您可以做出一个很好的猜测。)
为了实现这一点并解决类型问题,C99添加了语法,以便您可以这样写:
q = (struct MyStruct){x,y,...,z};
发布于 2012-08-30 11:46:50
您可以这样做,但您需要在聚合之前提供结构的类型:
struct MyStruct q;
q = (struct MyStruct){x,y,...,z};
https://stackoverflow.com/questions/12189480
复制相似问题