在C中初始化const变量

时间:2018-10-13 17:26:35

标签: c initialization

我想构建两个库 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 获取data1data4,我声明它们为常量,但是没有办法!编译器会产生此错误:

   initializer element is not constant

有什么办法可以解决此错误?

1 个答案:

答案 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;
}