あるテーブルが元のテーブルを参照する別のテーブルを参照するという静的テーブルの問題を回避しようとしています。コンパイラは、テーブル メンバーの 1 つの定義が見つからないというエラーを出します。この問題を回避するために、いくつかのテスト コードをモックアップしてきました。私がやろうとしているようなことは可能ですか?
以下は参照用のコードです。
#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") )
したがって、私の考えは、ポインターの割り当てをランタイムに延期することでした。オブジェクトをディスクに書き込んだり戻したりするときに、同様のことを行いました。このような静的テーブルを作成する方法はありますか? (静的に割り当てられた他の構造体へのポインターを使用)