【发布时间】:2015-05-24 11:49:18
【问题描述】:
我试图避免静态表中的问题,即一个表引用另一个引用原始表的表。编译器抱怨找不到表成员之一的定义。为了解决这个问题,我一直在模拟一些测试代码,这些方法会起作用吗?像我正在尝试做的事情是否可能?
以下是参考代码:
#define SWIZTBLMAX 256
#define TERM( NAME , ...) \
static cli_term NAME { __VA_ARGS__ }; swizzle_tbl[__COUNTER__] = { &NAME, "NAME" };
typedef struct cli_term
{
char* name;
cli_term* parent;
cli_term* child;
}cli_termt;
typedef struct swiz_ent
{
cli_term* t;
char* n;
}swiz_ent;
static swiz_ent swizzle_tbl[SWIZTBLMAX];
static cli_term* swizzle(const char* n)
{
int i;
for(i=0;i<SWIZTBLMAX;i++)
{
if(strcmp(n,swizzle_tbl[i].n)==0)
return swizzle_tbl[i].t;
}
return NULL;
}
TERM( ct_show_test, "test", swizzle("ct_show"), NULL )
TERM( ct_quit, "quit", NULL, NULL )
TERM( ct_show, "show", NULL, swizzle("ct_show_test") )
所以,我的想法是将指针分配推迟到运行时,我在将对象写入磁盘和返回时做了类似的事情。有什么办法可以创建这样的静态表吗? (带有指向静态分配的其他结构的指针)
【问题讨论】:
-
您似乎受到XY-problem 的困扰。如果您可以针对导致您采用这种方法的问题提出另一个问题,这可能会有所帮助。我不确定要从您的代码中得到什么,因为我不确定您要解决什么问题。
-
糟糕,我想这样做,这样我就可以静态定义术语,同时避免循环引用。上面的代码应该通过使用预处理器填充名称 - > 指针表来延迟指针的分配(并避免循环引用),该指针表在运行时引用以填充指针。
-
XY 问题不是您的代码存在的问题,它在我链接的文章中进行了解释。您可能想阅读它,它不是很长。
-
我的答案是否对您原来的问题有帮助?
标签: c pointers c-preprocessor static-array