联合成员初始化问题

4 c unions

我正在尝试下面的代码:

typedef union Data
{
   int i;
}data;

int main( )
{
   data d1;     
   d1.i = 10; // OK
   data d3 = {7};// OK
   data d2.i = 20; // Gives error
}
Run Code Online (Sandbox Code Playgroud)

我的问题为什么它data d2.i = 20为其他人提供错误并且有效?

unw*_*ind 6

因为它不是有效的语法.

它与之无关union,即它与a 无关struct.

您正在尝试使用union成员的名称作为名称,这是无效的.名称不能包含点(.).

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

我认为这会起作用,并且有点接近:

data d2 = { .i = 20 };
Run Code Online (Sandbox Code Playgroud)

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