未初始化的全局变量在c中是否始终默认为0?

com*_*fan 2 c elf

我知道未初始化的全局变量在BSS段中被恢复,操作系统应该将其初始化为零.

但是,这应该不是必须的,我从来没有见过任何标准说,未初始化的全局,必须是默认为零,因此它是安全的,授予借此?

odr*_*drm 5

以下是C99标准文件第6.7.8 条(第10段)的自动回答:

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

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

  • 所需的附加信息是在文件范围声明的对象始终具有静态存储持续时间. (4认同)