2013-02-12 71 views

回答

2

因为标准要求这是真的。

C99标准§6.7.8.10说:

如果具有自动存储持续时间的对象没有被明确初始化,它的值是不确定的。如果具有静态存储持续时间的对象未被明确初始化,则:

- 如果它具有指针类型,则将其初始化为空指针;

- 如果它有算术类型,它被初始化为(正或无符号)零;

- 如果它是一个聚合,每个成员根据这些规则初始化(递归);

- 如果它是一个联合,根据这些规则初始化(递归)第一个命名成员。

+0

Kevin Ballard请你详细说明你的答案 – 2013-02-12 07:40:25

+0

谢谢Kevin Ballard – 2013-02-12 07:42:35

2

初始化为0是有意义的 - 它使事情更具可预测性。这个问题应该是“为什么堆栈变量不是初始化?”

对此的回答可能是性能 - 初始化堆栈变量需要在每次输入函数时完成,如果实际上不需要初始化,可能会浪费时间。加载程序时会初始化静态变量,所以不会花费太多。

1

因为它们是唯一可以初始化而不会导致运行时性能损失的变量存储类。

自动存储类变量(默认值)不会被初始化,因为它们可能不会被使用。在之内的静态变量一个函数不能保证被初始化,直到函数被第一次调用。

零是有几个原因明智一般默认初始化器:它产生一个空字符串字符数组,它启动一个数组索引数,并产生一个NULL指针等

个人而言,我总是明确初始化静态甚至归零。这部分是纪录片,换句话说,“我真的想要零,不要改变它”。