有没有一种方法(技巧)可以用GCC从多个文件中初始化一个结构体的常量数组?我有几个“模块”(.c/.h文件),它们可以构建也可以不构建。我希望每个模块都能够在不使用RAM的情况下将自己注册到一个全局结构体常量数组中(这是一个嵌入式项目)。例如,我得到了一个全局动态分配的指针数组,指向跨越多个文件的const结构体,但如果可以,我希望将其从RAM中删除
kr98yfug1#
从多个文件中初始化某个东西通常不是一个好主意,因为这反过来又暗示程序设计中存在一些奇怪的地方。而且更复杂的是,C不把const限定变量视为编译时常量表达式,所以你不能在文件作用域中执行const int x = some_other_const;。从多个文件初始化变量的一个肮脏的老把戏是:
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?总的来说,所有的问题似乎都源于混乱的总体程序设计,所以在担心代码本身的细节之前,也许可以退一步回顾一下设计。
1条答案
按热度按时间kr98yfug1#
从多个文件中初始化某个东西通常不是一个好主意,因为这反过来又暗示程序设计中存在一些奇怪的地方。而且更复杂的是,C不把
const
限定变量视为编译时常量表达式,所以你不能在文件作用域中执行const int x = some_other_const;
。从多个文件初始化变量的一个肮脏的老把戏是:
这相当于:
例如,我得到了一个全局动态分配数组
无论如何,你不能在编译时初始化动态数组。而且,在嵌入式系统项目中,它们的存在也是值得怀疑的。在裸机/RTOS的情况下,这完全是无稽之谈,请参见Why should I not use dynamic memory allocation in embedded systems?
总的来说,所有的问题似乎都源于混乱的总体程序设计,所以在担心代码本身的细节之前,也许可以退一步回顾一下设计。