C中全局结构的成员是否初始化为零?

C中的全局或静态结构的成员是否保证自动初始化为零,与未初始化的全局变量或静态变量相同?

从C99标准6.7.8 / 10“初始化”:

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

– 如果它有指针类型,则将其初始化为空指针;
– 如果它有算术类型,则初始化为(正或无符号)零;
– 如果是聚合,则根据这些规则初始化(递归)每个成员;
– 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员

由于全局变量和静态结构具有静态存储持续时间,答案是肯定的 – 它们被初始化为零(结构中的指针将被设置为NULL指针值,通常为零位,但严格来说不需要)。

C ++ 2003标准有类似的要求(3.6.2“非本地对象的初始化”):

具有静态存储持续时间(3.7.1)的对象应在任何其他初始化发生之前进行零初始化(8.5)。

在零初始化发生之后的某个时间,在更复杂的规则下调用构造函数(如果对象具有构造函数),这些规则控制这些调用的时间和顺序。

局部变量未初始化。

 struct foobar { int x; }; int main(void) { struct foobar qux; /* qux is uninitialized. It is a local variable */ return 0; } 

静态局部变量初始化为0(零)

 struct foobar { int x; }; int main(void) { static struct foobar qux; /* qux is initialized (to 0). It is a static local variable */ return 0; } 

全局变量初始化为0(零)

 struct foobar { int x; }; struct foobar qux; /* qux is initialized (to 0). It is a global variable */ int main(void) { return 0; } 

struct普通的静态C变量没有区别。 如果该struct是静态的,则为该struct保留的内存完全初始化为0。

是的,所有全局数据都被清零,包括结构,类和联合的成员。

程序的全局部分中的所有数据都设置为零。

BSS段也称为未初始化数据,从数据段的末尾开始,包含所有未初始化的全局变量和默认初始化为零的静态变量。 例如,变量声明为static int i; 将包含在BSS部分中。

Bss细分 。

我不知道为什么自己尝试一下这么难。