【发布时间】:2020-02-12 17:05:44
【问题描述】:
在 C 中,具有自动存储功能的对象如果未初始化则具有不确定的值,而静态对象则没有。来自the standard:
如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。如果具有静态或线程存储持续时间的对象未显式初始化,则:
- 如果有指针类型,则初始化为空指针;
- 如果它具有算术类型,则将其初始化为(正或无符号)零;
- 如果是聚合,则每个成员都根据这些规则进行初始化(递归),并且任何填充都初始化为零位;
- 如果是联合,则根据这些规则(递归)初始化第一个命名成员,并将任何填充初始化为零位;
我们都知道 C 是一种非常无情的语言,它把所有的责任都交给了程序员,所以我有点想知道为什么他们决定零初始化静态对象。我还想知道为什么当且仅当至少一个元素被手动初始化时,自动数组才会完全零初始化。但最让我好奇的是,他们为什么不选择为所有事情或一事无成。
这背后的原理是什么?
【问题讨论】:
-
我怀疑这可能归结为此类数据通常如何保留在程序的数据段中。
-
其实是BSS segment
-
"把所有的responsibility 给程序员" --> 很好。
标签: c initialization storage-duration