我想构建两个库 lib1.a 和 lib2.a 。
lib2.a 位于顶层,它只能与 lib1.a 全局数据共享,而不能与头文件共享。然后 lib1.a 可以使用extern
关键字来使用这些数据。
我发现的困难是:我想使用 lib2.a中定义的数据在 lib1.a 中的 file1.c 中初始化常量。 。
示例:
//lib1.a->file1.c:
const My_Var_Type My_Var = {
.field1 = data1,
.field2 = data2,
.field3 = data3,
.field4 = data4
};
现在应该从 lib2.a 获取data1
到data4
,我声明它们为常量,但是没有办法!编译器会产生此错误:
initializer element is not constant
有什么办法可以解决此错误?
答案 0 :(得分:2)
您不能使用非常量表达式(例如另一个变量)来初始化静态存储对象(全局对象或具有属性static
)。那些对象是否不是const
这是非法的:
extern int data1, data2, data3, data4;
typedef struct
{
int field1;
int field2;
int field3;
int field4;
}My_Var_Type;
const My_Var_Type My_Var=
{
.field1 = data1, /* wrong */
.field2 = data2, /* wrong */
.field3 = data3, /* wrong */
.field4 = data4, /* wrong */
};
int main()
{
/* .... */
return 0;
}
您可以通过这种方式初始化自动变量。
int main()
{
const My_Var_Type My_Var=
{
.field1 = data1, /* good */
.field2 = data2, /* good */
.field3 = data3, /* good */
.field4 = data4, /* good */
};
/* ....*/
return 0;
}