我有一堆嵌套结构,里面有指针数组。 我需要一个工具来生成指向数据类型的(代码)实例。
typedef stuct
{
TYPE_1 * data[5];
int a;
}TOP_T;
typedef struct
{
TYPE_2 * pToType1Array[2];
char c;
}TYPE_1;
typedef struct
{
int b;
}TYPE_2;
为了正确使用这两种类型,我需要创建总共10个TYPE_2实例 - 因为5 * 2 - 和2个TYPE_1实例,然后分配指向实例的指针。
TYPE_2 t2_0;
TYPE_2 t2_1;
TYPE_1 t1_0;
TYPE_1 t1_1;
TYPE_1 t1_2;
TYPE_1 t1_3;
TYPE_1 t1_4;
TOP_T first;
first.data[0] = &t1_0;
first.data[1] = &t1_1;
...
我知道如何手动创建实例,但想要一个脚本/工具来执行此操作。
我不能使用malloc。
我正在使用Eclipse,因此我可以访问类型树。
现在,我必须这样做
/********* ST_CHRONO_TRACE_CONTEXT_T - one for each CHRONO_NUM_TRACE_CONTEXTS per CHRONO_NUM_SESSION_CONTEXTS session */
ST_CHRONO_TRACE_CONTEXT_T CHRONO_TraceContext_0_0;
ST_CHRONO_TRACE_CONTEXT_T CHRONO_TraceContext_0_1;
ST_CHRONO_TRACE_CONTEXT_T CHRONO_TraceContext_1_0;
ST_CHRONO_TRACE_CONTEXT_T CHRONO_TraceContext_1_1;
ST_CHRONO_TRACE_CONTEXT_T * CHRONO_TraceContext_PTRS[CHRONO_NUM_SESSION_CONTEXTS][CHRONO_NUM_TRACE_CONTEXTS] =
{
{&CHRONO_TraceContext_0_0, &CHRONO_TraceContext_0_1},
{&CHRONO_TraceContext_1_0, &CHRONO_TraceContext_1_1}
};
这些定义是我想要自动生成的。
答案 0 :(得分:0)
由于您无法使用malloc()
- 族函数,因此您必须要求全局变量或堆栈分配的本地变量。对于你提出的相当简单的情况,你可以半自动地这样做:
TYPE_2 twos[10] = {0};
TYPE_1 ones[5] = {{0}};
TOP_T top = {{0}};
static init_pointers() {
int i, j;
for (i = 0; i < 5; i += 1) {
top.data[i] = ones + i;
for (int j = 0; j < 2; j++) {
ones[i].pToType1Array[j] = twos + (i * 2 + j);
}
}
}
/* ... */
init_pointers();
您可以扩展诸如此类的函数,以便在算法上填充非指针成员。但是,如果您确实需要以编程方式生成C源代码,那么您可能需要编写自己的工具来执行此操作。这样的工具可以使用类似的方法(指向数组元素的指针)来生成不依赖于malloc()
的代码,无论是否有运行时初始化函数(例如我提供)。