假设 file.c 中有此代码片段:
union numbers
{
int i;
float f;
};
union numbers first_number;
first_number.i = 5;
first_number.f = 3.9;
printf("%i %'.2f\n", first_number.i, first_number.f);
为什么没有警告 first_number.i
用 gcc -Wall file.c
编译后被覆盖first_number.i
的结果数字在哪里?是从哪里来的?
至少,覆盖 union 成员的一般目的是什么,不是声明更多 union 变量来避免这种行为更好吗?
最佳答案
这就是 C union 的工作方式。如果您想要不重叠的字段,请使用结构体。存储浮点值后 .i
成员的值是解释为 int 的位模式。
关于linux - 为什么在 gcc 中覆盖 union 成员没有警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52561833/