ac结构的成员是否保证初始化为0?

Jef*_*ger 3 c

当我在C中声明一个结构时,我保证会将成员初始化为某个特定值,例如0表示整数成员吗?

编辑:

所以,假设我有一个看起来像这样的结构:

typedef struct
{
     int a;
} my_str;
Run Code Online (Sandbox Code Playgroud)

我宣布:

my_str thing1;
Run Code Online (Sandbox Code Playgroud)

全球.根据一些答案,thing1.a将初始化为0 - 我是否理解正确?

hrn*_*rnt 7

只保证具有静态存储持续时间的变量(全局变量,函数中的静态变量)初始化为0.没有其他保证.


Chr*_*oph 7

C99标准的相关部分:

第6.2.4节,§3:

标识符使用外部或内部链接声明的对象,或者使用存储类说明符static声明的对象具有静态存储持续时间.它的生命周期是程序的整个执行,它的存储值只在程序启动之前初始化一次.

第6.2.4节,§4:

声明标识符没有链接且没有存储类说明符静态的对象具有自动存储持续时间.

第6.2.4节,§5(关于具有自动存储持续时间的对象):

对象的初始值是不确定的.如果为对象指定了初始化,则每次在执行块时达到声明时都会执行初始化; 否则,每次达到声明时,该值将变为不确定.

第6.7.8节,§10:

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

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

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

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

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