我正在尝试定义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.
如果您尝试在块范围内执行相同的操作,那将是正确的:
typedef struct {
int a;
int b;
} aStruct;
int main() {
const aStruct foo = {
.a = 10,
.b = 20
};
const aStruct bar = {
.a = 15,
.b = foo.b
};
}
因此,最好使用一些定义将全局变量初始化为相同的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句