struct的unsigned int字段是否自动初始化?

gsa*_*ras 1 c struct

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)

相关的答案,但不一样,因为在我的例子中,只有一个字段,没有初始化.

Ded*_*tor 7

答案是,它取决于存储类:

如果是_Thread_localstatic,则保证归零.

如果是auto动态存储,则不进行初始化.

6.7.9初始化

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

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

BTW:C++中的零初始化等同于静态/线程局部对象的那些规则.

  • `auto`是关键字(在开始时引入对称性),标记自动存储类对象(函数本地,没有显式存储类,也就是堆栈分配).是的,在C++ 11中,他们终于在C++中删除了那些语义,用类型演绎语义替换它们(Stroustroup已经想在很久以前的C-with-classes中做到这一点). (3认同)
  • 是的,C有一个`auto`关键字.http://stackoverflow.com/questions/2192547/where-is-the-c-auto-keyword-used (2认同)

250*_*501 5

不,价值未确定.

仅当变量是静态或全局变量时,值才为0.