Skip to main content
 首页 » 编程设计

c中在 C 中初始化 const 变量

2025年12月25日116java哥

我想构建两个库lib1.alib2.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 
}; 

现在 data1data4 应该从 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; 
}