我想跨多个 *.c 文件定义(并初始化)结构的多个实例,但我希望它们在编译时收集到一个连续的数组中。我一直在研究使用自定义部分并使用该部分的开始和结束地址作为结构数组的开始和结束,但我还没有完全弄清楚细节,我宁愿不写自定义链接器脚本,如果我能逃脱它。以下是我的第一个 hack 的摘要,但它并没有奏效:
// mystruct.h:
typedef struct { int a; int b; } mystruct;
// mycode1.c:
#include "mystruct.h"
mystruct instance1 = { 1, 2 } __attribute__((section(".mysection")));
// mycode2.c:
#include "mystruct.h"
mystruct instance2 = { 3, 4 } __attribute__((section(".mysection")));
// mystruct.c:
extern char __mysection_start;
extern char __mysection_end;
void myfunc(void) {
mystruct * p = &__mysection_start;
for ( ; p < &__mysection_end ; p++) {
// do stuff using p->a and p->b
}
}