复制部分初始化的结构是否在 C 中明确定义?

Is copying partially initialized structures well defined in C?

我最近了解到,通过简单的构造或赋值复制部分初始化的结构是 。在 C 中是否同样适用,或者标准是否保证初始化和赋值的行为类似于 memcpy

typedef struct { int i; int j; } A;

void foo() {
   A x;
   x.i = 0;
   // Leave x.j indeterminate. Is the following well defined?
   A y = x;
   y.j = y.i + 1;
}

x 不是 "partially initialized" 这根本没有初始化。 在 y 的初始化程序中读取 x 会将 "indetermined" 值(如果可以这样说的话)传播到 y。如果 int 可以在您的平台上有陷阱表示,这已经是一个错误。 但是你不会阅读那个不确定的字段y.j,所以在那个特定的分配中没有问题。