联合成员初始化问题
Issue with union member initialization
我正在尝试以下代码:
typedef union Data
{
int i;
}data;
int main( )
{
data d1;
d1.i = 10; // OK
data d3 = {7};// OK
data d2.i = 20; // Gives error
}
我的问题是为什么它对 data d2.i = 20
报错而对其他人有效?
因为语法无效。
它与 union
无关,即 struct
.
是一样的
您试图使用 union
成员的名字作为名字,这是无效的。名称不能包含点 (.
).
初始化有效,因为初始化表达式(右侧)与左侧类型匹配(某种程度上),但这不是您在最后一行中尝试的。
我认为这会奏效,而且有点接近:
data d2 = { .i = 20 };
这使用 C99 语法命名初始化列表中的目标成员。
我正在尝试以下代码:
typedef union Data
{
int i;
}data;
int main( )
{
data d1;
d1.i = 10; // OK
data d3 = {7};// OK
data d2.i = 20; // Gives error
}
我的问题是为什么它对 data d2.i = 20
报错而对其他人有效?
因为语法无效。
它与 union
无关,即 struct
.
您试图使用 union
成员的名字作为名字,这是无效的。名称不能包含点 (.
).
初始化有效,因为初始化表达式(右侧)与左侧类型匹配(某种程度上),但这不是您在最后一行中尝试的。
我认为这会奏效,而且有点接近:
data d2 = { .i = 20 };
这使用 C99 语法命名初始化列表中的目标成员。