gpt4 book ai didi

c - 为 C 中的嵌套结构指针生成代码

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:19 24 4
gpt4 key购买 nike

我有一堆嵌套结构,里面有指向数组的指针。我需要一个工具来生成指向的数据类型的(代码)实例。

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}
};

这些定义是我想要自动生成的。

最佳答案

由于您不能使用 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() 的代码,无论是否带有运行时初始化函数,例如我提供的。

关于c - 为 C 中的嵌套结构指针生成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29614939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com