c - 声明时联合是否设置为零?
问题描述
我在两台不同的机器上试过,我得到了零。这只是一个机会,它是垃圾吗?
#include <stdio.h>
int main()
{
typedef union { int x; } union1;
union1 u;
printf("%d\n", u.x);
}
我知道你没有初始化的编译警告,所以,请不要包含答案或评论。我想知道以下哪种情况:
- 它依赖于编译器(如果是,请包含 gcc 的任何官方来源)
- 它总是垃圾,我很幸运能在两台不同的机器上找到全零。
- 它始终为零(如果是,请提供任何官方来源)
解决方案
当声明具有自动存储持续时间的变量或聚合时,它具有未定义的值,直到它被显式分配一个值。
u
具有自动存储持续时间,因为它是在函数范围内声明的,而不是显式声明的static
.
C 标准,§ 6.7.9 第 10 页:
如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。
在现代系统上很有可能,您只是在该地址处获取内存中已经存在的任何内容,但这绝不是保证。
推荐阅读
- node.js - Node.js 事件和带有剩余参数的事件处理程序
- swift - 如何在swift中使用其他属性将实例作为属性传递
- node.js - 仅在所有人都可以看到的频道中工作的静音角色 | 机器人 discord.js
- dataframe - 使用来自 readline 的用户输入来计算 r studio 中数据库变量的摘要
- c - 防止 GCC 优化对内存映射地址的循环写入
- python - 如何在python中进行非均匀并行处理?
- html - 在 VBA 中更新 HTML 文本框的控件值
- r - 如何使用“lapply”获得“干净”列表?
- javascript - 在本机反应中下载音频文件?
- firebase - 无法将自定义域添加到 Firebase