首页 > 解决方案 > 为什么由于覆盖 gcc 中的联合成员而没有警告?

问题描述

假设 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来自哪里?

至少,覆盖联合成员的一般目的是什么,而不是声明更多联合变量来避免这种行为不是更好吗?

标签: linuxcompilationgccc

解决方案


这就是 C 工会的工作方式。如果您想要不重叠的字段,请使用结构。存储浮点值后的.i成员值是解释为 int 的位模式。


推荐阅读