是否在C中复制了部分初始化的结构?

时间:2015-10-16 14:34:54

标签: c language-lawyer c99 c11

我最近了解到,通过简单的构造或赋值复制部分初始化的结构是undefined 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;
}

1 个答案:

答案 0 :(得分:1)

x未被部分初始化"这根本没有初始化。 在x的初始化程序中阅读y会传播"不确定"价值(如果可以这么说)到y。如果int可能在您的平台上有陷阱表示,则这已经是错误。 但是,你不会读到那个不确定的字段y.j,所以在那个特定的任务中没有问题。