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

Generate code for nested struct pointers in C

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

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

我知道如何手动创建实例,但想要 script/tool 来执行此操作。

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