未初始化的C结构字段

时间:2019-05-17 20:09:49

标签: c struct field undefined-behavior

是否尝试在C中访问未初始化的结构字段,认为行为未定义?

struct s { int i; };
struct s a;
printf("%d", a.i);

1 个答案:

答案 0 :(得分:2)

取决于变量的存储时间:

struct
{
    int a;
    int b;
}c;

int main()
{

    struct 
    {
        int a;
        int b;
    }e;

    static struct 
    {
        int a;
        int b;
    }s;

    printf("%d", c.a);    // <- correct no UB
    printf("%d", s.a);    // <- correct no UB
    printf("%d", e.a);    // <- UB 
}

结构cs的存储期限为static,并且它们总是被初始化。如果程序员未以显式方式初始化它们,则将它们清零。

结构e具有自动存储持续时间,如果没有由程序员明确初始化,则结构不为零