linux - 为什么在 gcc 中覆盖 union 成员没有警告?

标签 linux compilation gcc c

假设 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.igcc -Wall file.c 编译后被覆盖first_number.i 的结果数字在哪里?是从哪里来的?

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

最佳答案

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

关于linux - 为什么在 gcc 中覆盖 union 成员没有警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52561833/

相关文章:

linux - 在步骤 'Retrieving needed toolchain components' tarball 中构建失败

使用 libxml2 的 C 代码在 Win 7 上的 cygwin 上给出编译时错误

html - 如何使用 sed 等 Linux 命令向 html 添加一些标签

compilation - 在编译字中编译匿名字

c++ - 语义分析后拦截编译

c - 如果没有使用头文件中包含的函数,编译器是否仍然编译这个文件?

linux - gcc 本地在主文件夹中本地安装 gcc 7.1

linux - "/usr/bin/ld: cannot find -lz"

linux - cvs 在单个命令中提交和添加文件

linux - 编写 .sh 代码