在C中为嵌套的struct指针生成代码

时间:2015-04-13 20:55:33

标签: c struct auto-generate

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

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

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

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