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

标签 c struct constants

我正在尝试定义两个具有相同数据结构的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 相当陌生,所以我不完全理解常量和数据结构是如何工作的,尤其是当它们放在一起时。有人可以帮我弄清楚这里发生了什么吗?

最佳答案

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

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

如果您尝试在 block 范围内执行相同的操作,那是正确的:

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

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

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

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

关于c - 将 const 变量的成员分配给另一个 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318916/

相关文章:

c - Linux 中的线程同步?

c - 找不到图书馆?

c - 不确定 'control may reach end of non-void function' 错误消息的含义

pointers - 为什么 2 个不同的 http.Request 结构的 http.Request.URL.Host 的地址相同?

c++ - 使用 Null C++ 初始化结构数组

c++ - const vs non-const 变量,赋值后值不变

更改 char* 的内存地址

Java 到 C 对象传递

C++:定义类的最大/最小限制

unit-testing - 生产和测试代码常量之间的 DRY