我正在尝试下面的代码:
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 语法命名初始化列表中的目标成员。
关于c - union 成员初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39636645/