1


老实说,我不知道如何发布这个问题......
我有一个全局动态列表,程序的所有功能都可以看到它,
因为今天这个列表被填充了从文件中读取数据。
但现在我想要一个内部“列表”,如果没有指定文件,则加载该列表。
列表元素是这样的:

// odb tuple
typedef struct _odb_t
{
const char *name,*value;
struct _odb_t *next;
} odb_t;

enum _method {GET,POST};

// odb type binding
typedef struct _odb_type
{
    enum _type type;
    const char *value;
    struct _odb_type *next;
} odb_type;

// defining online_db struct
typedef struct _odb
{
    const char *host,*file,*patrn;
    enum _method method;
    odb_type *types;
    odb_t *tuples;
    pthread_t thread; // the thread that is using this host
    struct _odb *next;
} odb;

我怎样才能在 .text 部分中有一个内部列表?
提前致谢。

4

1 回答 1

2

使用 C99,您可以将所谓的复合文字作为某种未命名的变量和指定的初始化程序来简化初始化程序的编写。你的结构有点复杂,我一眼就能捕捉到它们的完整含义,但类似于这里的东西应该可以工作。

odb const*const head = 
 &(odb const){
  .method = something,
  .next   = &(odb const){
     .method = another,
     .next = 0,
  },
};

当然,您必须用正确的数据类似地初始化其他指针字段,但我希望您明白这一点。

当在文件范围内使用时,表单的复合文字(typename){ initiliazers }是静态分配的。

于 2012-05-27T15:14:36.227 回答