我想构建两个库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
};
现在 data1 到 data4 应该从 lib2.a 获取,我将它们声明为常量,但没办法!编译器生成此错误:
initializer element is not constant
有什么办法可以修复这个错误吗?
请您参考如下方法:
您无法使用非常量表达式(例如另一个变量)初始化静态存储对象(全局对象或具有属性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;
}
