将const变量的成员分配给另一个const

时间:2016-09-04 16:08:22

标签: c struct const

我正在尝试使用相同的数据结构定义两个const变量。我想确保每个变量的所有成员完全相同,除了我要更改的那个。由于我不想保留相同代码的两个完全副本,我想“为什么不在一个中使用现有成员来初始化另一个?”

以下是代码中的示例:

typedef struct {
    int a;
    int b;
} aStruct;

const aStruct foo = {
    .a = 10,
    .b = 20
};

const aStruct bar = {
    .a = 15,
    .b = foo.b
};

当我尝试编译此代码时,出现错误:

foo.c:13:14: error: initializer element is not constant
         .b = foo.b
              ^~~
foo.c:13:14: note: (near initialization for ‘bar.b’)

我对C很新,所以我不完全理解常量和数据结构是如何工作的,特别是当它们放在一起时。有人可以帮我弄清楚这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

这是因为您尝试在文件范围初始化全局变量,并且在该范围内只能使用常量(foo.b)来初始化值。我的编译器提供了更好的消息:

error: initializer element is not a compile-time constant
    .b = foo.b
         ~~~~^ 1 error generated.

如果你曾尝试在块范围内做同样的事情,那就是正确的:

typedef struct {
    int a;
    int b;
} aStruct;

int main() {
  const aStruct foo = {
    .a = 10,
    .b = 20
  };

  const aStruct bar = {
    .a = 15,
    .b = foo.b
  };
}

因此,您最好使用某些定义将全局变量初始化为相同的值。