复制部分初始化的结构是否在 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
,所以在那个特定的分配中没有问题。
我最近了解到,通过简单的构造或赋值复制部分初始化的结构是 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
,所以在那个特定的分配中没有问题。