联合成员初始化问题

时间:2016-09-22 10:30:49

标签: c unions

我正在尝试下面的代码:

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 } 提供错误并且适用于其他人?

1 个答案:

答案 0 :(得分:6)

因为它的语法无效。

它与union无关,即struct的内容相同。

您尝试使用union成员的名称作为名称,但该名称无效。名称不能包含点(.)。

初始化有效,因为初始化表达式(右侧)与左侧类型的匹配(类型),但这不是您尝试的最后一行。

我认为这会奏效,而且很接近:

data d2 = { .i = 20 };

这使用C99语法命名初始化列表中的目标成员。