静态和外部变量值分配给0为什么?

时间:2013-02-12 07:38:15

标签: c

为什么为静态变量赋值0?

3 个答案:

答案 0 :(得分:2)

因为标准规定这是真的。

C99标准的第6.6.8.10节说:

  

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

     

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

     

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

     

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

     

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

答案 1 :(得分:2)

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

答案可能是性能 - 每次进入函数时都需要初始化堆栈变量,如果实际上不需要初始化,这可能会浪费时间。加载程序时会初始化静态变量,因此不会花费太多。

答案 2 :(得分:1)

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

自动存储类变量(默认值)未初始化,因为它们可能未被使用。静态变量 in 函数在第一次调用函数之前不会被初始化。

Zero是一个合理的通用默认初始化器,原因如下:在char数组中它产生一个空字符串,它启动一个数组索引计数,并产生一个NULL指针等。

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