是否尝试在C中访问未初始化的结构字段,认为行为未定义?
struct s { int i; };
struct s a;
printf("%d", a.i);
答案 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
}
结构c
和s
的存储期限为static
,并且它们总是被初始化。如果程序员未以显式方式初始化它们,则将它们清零。
结构e
具有自动存储持续时间,如果没有由程序员明确初始化,则结构不为零