【发布时间】:2019-10-05 04:06:52
【问题描述】:
尝试访问 C 中未初始化的结构字段是否被视为未定义行为?
struct s { int i; };
struct s a;
printf("%d", a.i);
【问题讨论】:
-
为什么它可能不同于访问任何其他未初始化的内存位置?
-
据我记忆,只有全局变量和静态变量是零初始化的。访问任何其他都是UB。
-
视情况而定。自动存储对象 - UB。静态存储对象 - 无 UB
-
这个问题至少在“(为什么)使用未初始化的变量未定义行为?”中没有重复。请看 P__J__ 的第一个答案,将其与您认为存在重复的内容进行比较,您就会明白它们是两个不同的东西。谢天谢地,我希望你不要继续关闭我的问题。
-
@GovindParmar:在许多情况下,复制一个结构可能有用,其中一些但不是所有成员都已写入,其中一些情况可以概括为不同条件控制是否不同的情况。成员被写入,在某些情况下,函数可能根本不写入。作者认为没有必要告诉编译器编写者在没有任何理由不支持它们的情况下应该支持此类构造(例如捕获以避免可能的数据泄漏),因为他们希望编译器编写者无论如何都会这样做。跨度>
标签: c struct field undefined-behavior