有没有类似的语法
typedef struct foo
{
int X;
int Y;
int Z;
} foo;
int main()
{
// Initialize everything
foo Variable = (foo){
.X = 10;
.Y = 15;
.Z = 20;
};
// Assign the X and Y variables, but keep Z the same
Variable = (foo){
.X = 15;
.Y = 20;
// .Z stays the same
};
}
如果有这种类型的 QOL 语法而不是必须打字就好了
int main()
{
foo Variable = {bla bla};
// Keep having to type Variable. to access struct members
Variable.X = 10;
Variable.Y = 15;
}
这对于结构中的结构来说真的很烦人,即
Struct1->Struct2.Struct3.Element.X = 10;
Struct1->Struct2.Struct3.Element.Y = 15;
初步整改:
发布的代码片段并非来自编译器已看到的“live”源。在文本框中键入代码示例可能会导致输入几乎看不见的语法错误。
更糟糕的是,这些错误太容易传播。
要初始化的成员形成一个
。列表术语用逗号分隔,而不是分号。请参阅下面的代码,显示此较小的语法错误已更正。
不,C 不支持这种初始化或赋值方式。如果您只想访问结构的一部分,则需要明确表达。
编辑:你可以逃脱:
Variable = (foo){
.X = 15, // NB: comma, not semi-colon
.Y = 20,
.Z = Variable.Z
};
至少优化编译器只会生成变化元素的操作。但它比单一作业的来源更多。
struct {
int f1;
int f2;
struct {
int b1;
int b2;
int b3;
} bar;
} foo = {
1, 2, { 42, 43, 44 },
};
printf( "%d %d %d\n", foo.bar.b1, foo.bar.b2, foo.bar.b3 );
#define S foo.bar
S.b1 = 7;
S.b2 = 8;
printf( "%d %d %d\n", S.b1, S.b2, S.b3 );
#undef S