gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:09 25 4
gpt4 key购买 nike

我试图定义两个具有相同数据结构的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com