我不确定这是否可行,但我需要在运行时修改某些结构的字段。因此,根据运行可执行文件时传递的参数,它应该生成不同类型的结构。
#if (PARAM_SET)
typedef struct{
char fetch[FILE];
uint32_t bin;
uint32_t bin_1;
uint32_t bin_2;
}
HELPER;
typedef struct __attribute__ ((packed)){
char job[4];
uint32_t last;
uint32_t liv_1;
uint32_t liv_2;
uint32_t dipr;
uint32_t notch;
uint32_t cnt;
uint32_t max;
char path[MAX_HEAD_PATH];
HELPER for[MAX_NUM];
}
BOARD;
#else
typedef struct __attribute__ ((packed)){
char job[4]
uint32_t nxt;
uint32_t prv;
uin32 boards;
char path[MAX_NUM];
}
BOARD;
#endif
答案 0 :(得分:0)
您无法在运行时更改结构(即在编译程序之后)。
但是您可以提供两种类型的结构(具有不同的名称)并调整您的代码,使其根据在运行时评估的参数/条件使用正确的类型。
答案 1 :(得分:0)
可能是这样的:
typedef struct __attribute__ ((packed)){
char job[4];
uint32_t last;
uint32_t liv_1;
uint32_t liv_2;
uint32_t dipr;
uint32_t notch;
uint32_t cnt;
uint32_t max;
char path[MAX_HEAD_PATH];
HELPER for[MAX_NUM];
}
BOARDA;
typedef struct __attribute__ ((packed)){
char job[4]
uint32_t nxt;
uint32_t prv;
uin32 boards;
char path[MAX_NUM];
BOARDA *basePtr;
}
BOARDB;
typedef struct __attribute__ ((packed)){
BOARDA borda;
BOARDB bordb;
}
BOARD;
将basePtr初始化为指向BOARD,然后您始终可以从BOARDA或BOARDB地址返回整个结构的基址。