首页 > 解决方案 > 声明时联合是否设置为零?

问题描述

我在两台不同的机器上试过,我得到了零。这只是一个机会,它是垃圾吗?

#include <stdio.h>

int main()
{
    typedef union { int x; } union1;
    union1 u;
    printf("%d\n", u.x);
}

我知道你没有初始化的编译警告,所以,请不要包含答案或评论。我想知道以下哪种情况:

标签: cunion

解决方案


当声明具有自动存储持续时间的变量或聚合时,它具有未定义的值,直到它被显式分配一个值。

u具有自动存储持续时间,因为它是在函数范围内声明的,而不是显式声明的static.

C 标准,§ 6.7.9 第 10 页

如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。

在现代系统上很有可能,您只是在该地址处获取内存中已经存在的任何内容,但这绝不是保证。


推荐阅读