我正在尝试下面的代码:
X
我的问题是为什么它为typedef union Data
{
int i;
}data;
int main( )
{
data d1;
d1.i = 10; // OK
data d3 = {7};// OK
data d2.i = 20; // Gives error
}
提供错误并且适用于其他人?
答案 0 :(得分:6)
因为它的语法无效。
它与union
无关,即struct
的内容相同。
您尝试使用union
成员的名称作为名称,但该名称无效。名称不能包含点(.
)。
初始化有效,因为初始化表达式(右侧)与左侧类型的匹配(类型),但这不是您尝试的最后一行。
我认为这会奏效,而且很接近:
data d2 = { .i = 20 };
这使用C99语法命名初始化列表中的目标成员。