C是否保证结构中的无符号整数字段被初始化为零?在我的系统中,似乎它(或者我非常"幸运"(实际上是不幸的)).
在代码中,在以下场景中会发生什么?
struct node {
unsigned int rec_size;
};
struct node node;
// what is the value of node.rec_size? Undefined or 0?
Run Code Online (Sandbox Code Playgroud)
相关的答案,但不一样,因为在我的例子中,只有一个字段,没有初始化.
答案是,它取决于存储类:
如果是_Thread_local或static,则保证归零.
如果是auto动态存储,则不进行初始化.
6.7.9初始化
10如果未显式初始化具有自动存储持续时间的对象,则其值不确定.如果未显式初始化具有静态或线程存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零;
- 如果它是一个聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零比特;
- 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员,并将任何填充初始化为零位;
BTW:C++中的零初始化等同于静态/线程局部对象的那些规则.