我正在尝试下面的代码:
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为其他人提供错误并且有效?
因为它不是有效的语法.
它与之无关union,即它与a 无关struct.
您正在尝试使用union成员的名称作为名称,这是无效的.名称不能包含点(.).
初始化有效,因为初始化表达式(右侧)与左侧类型的匹配(类型),但这不是您在最后一行中尝试的.
我认为这会起作用,并且有点接近:
data d2 = { .i = 20 };
Run Code Online (Sandbox Code Playgroud)
这使用C99语法命名初始化列表中的目标成员.