根据定义的行为,未初始化的全局int始终为0,如果不是全局的,则为true。那么全局结构呢? 是
struct s
{
int a;
}instance;
int main()
{
printf("%d\n", instance.a);
return 0;
}
总是打印0
还是技术上不确定的行为?
答案 0 :(得分:3)
对于全局结构,所有字段都将初始化为0 / NULL。当前C standard的6.7.9p10节对此进行了详细说明:
如果具有自动存储持续时间的对象未初始化 显然,它的值是不确定的。如果对象具有静态 或未明确初始化线程存储持续时间,则:
- 如果具有指针类型,则将其初始化为空指针;
- 如果具有算术类型,则将其初始化为(正数或无符号)零;
- 如果它是一个聚合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位;
- 如果它是一个联合,则根据这些规则(递归地)初始化第一个命名成员,并初始化任何填充 到零位;
旧的C89 standard在3.5.7节中具有类似的语言:
具有静态存储持续时间的对象未初始化 显式地,它隐式地初始化,就像每个具有 算术类型分配了0,每个成员都具有指针类型 被分配了一个空指针常量。如果对象具有自动 存储持续时间未明确初始化,其值为 不确定
...
如果聚合包含作为聚合或联合的成员,或者 联盟的第一个成员是集合或联盟,规则适用 递归到子集合或包含的联合
因此,在您的情况下,保证instance.a
设置为0。