来自多个文件的结构的初始化常量C数组

nom7f22z  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(101)

有没有一种方法(技巧)可以用GCC从多个文件中初始化一个结构体的常量数组?我有几个“模块”(.c/.h文件),它们可以构建也可以不构建。我希望每个模块都能够在不使用RAM的情况下将自己注册到一个全局结构体常量数组中(这是一个嵌入式项目)。
例如,我得到了一个全局动态分配的指针数组,指向跨越多个文件的const结构体,但如果可以,我希望将其从RAM中删除

kr98yfug

kr98yfug1#

从多个文件中初始化某个东西通常不是一个好主意,因为这反过来又暗示程序设计中存在一些奇怪的地方。而且更复杂的是,C不把const限定变量视为编译时常量表达式,所以你不能在文件作用域中执行const int x = some_other_const;
从多个文件初始化变量的一个肮脏的老把戏是:

const int array [] =
{
   #include "some_data.h"
   #include "more_data.h"
};

...

// some_data.h
1,2,3,

// more_data.h
4,5,6,

这相当于:

const int array [] =
{
   1,2,3,
   4,5,6,
};

例如,我得到了一个全局动态分配数组
无论如何,你不能在编译时初始化动态数组。而且,在嵌入式系统项目中,它们的存在也是值得怀疑的。在裸机/RTOS的情况下,这完全是无稽之谈,请参见Why should I not use dynamic memory allocation in embedded systems?
总的来说,所有的问题似乎都源于混乱的总体程序设计,所以在担心代码本身的细节之前,也许可以退一步回顾一下设计。

相关问题