联合成员初始化问题

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 语法命名初始化列表中的目标成员。