c - union 成员初始化问题

标签 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
}

我的问题是为什么它对 data d2.i = 20 给出错误而对其他数据有效?

最佳答案

因为它不是有效的语法。

它与 union 无关,即它对于 struct 是相同的。

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

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

我认为这可行,并且有点接近:

data d2 = { .i = 20 };

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

关于c - union 成员初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39636645/

相关文章:

c++ - 在 MSVC 编译器下使用最大成员初始化 union

c - *指针 = - *指针?

c - GCC错误无限循环

python - Python C 模块中的映射——有什么需要注意的陷阱吗?

c++ - 检查 union 实例之间相等性的正确方法是什么?

C : assign value to uninitialzed struct and union

c - 当我们覆盖 C 中的 union 字段时会发生什么?

c - union 内部结构的填充如何工作?

c - 使用 ntohl() 初始化常量变量

c - 用宏注释函数