代码之家  ›  专栏  ›  技术社区  ›  Jeff Barger

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

c
  •  3
  • Jeff Barger  · 技术社区  · 17 年前

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

    编辑:

    typedef struct
    {
         int a;
    } my_str;
    

    我宣布:

    my_str thing1;
    

    根据一些答案,thing1.a将被初始化为0-我理解正确吗?

    6 回复  |  直到 9 年前
        1
  •  7
  •   hrnt    17 年前

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

        2
  •  7
  •   Community Mohan Dere    6 年前

    C99标准的相关部分:

    其标识符已声明的对象 使用存储类说明符 static具有静态存储持续时间。 它的生命周期就是整个执行过程 其存储值为 仅初始化一次,在

    第6.2.4节,§4:

    没有连接,也没有 自动存储持续时间。

    第6.2.4节§5(关于具有自动存储期限的对象):

    对象的初始值为 如果为对象指定,则为 在执行区块时达到; 否则,该值将变为 不确定每次 已达成声明。

    第6.7.8节,§10:

    如果对象具有自动 明确地说,它的价值是 不确定的如果一个物体 静态存储持续时间不可用

    如果是 空指针;

    类型,则初始化为(正) 或无符号)零;

    如果它是一个 聚合时,每个成员都被初始化 (递归地)根据这些 规则;

    命名成员已初始化 (递归地)根据这些

        3
  •  1
  •   PiedPiper    17 年前

    从 ANSI C standard :如果没有显式初始化具有静态存储持续时间的对象,则会隐式初始化该对象,就像每个具有静态存储持续时间的成员一样 分配了一个空指针常量。如果一个物体 未显式初始化自动存储持续时间,其值为 不确定的

        4
  •  0
  •   Clifford    17 年前

    结构是一种数据类型,类型不决定初始化。存储类决定初始化。因此,将创建结构类型的静态分配对象。与任何其他静态对象一样,可以初始化为零。使用 静止的 静态分配在函数范围之外声明的关键字或。

        5
  •  -1
  •   Anon E. Mous    17 年前

    例如,MS VC++编译器会将调试版本的结构成员初始化为零,而不会将发布版本的成员初始化为零。

        6
  •  -1
  •   Ashwin    17 年前

    不,没有这样的保证。如果希望将它们初始化为零,则几乎需要手动完成,除非将结构变量声明为全局变量。

    编辑:是的,我忘了提到函数中的静态变量。