这是我的结构:
struct ini_entry {
const char *section;
const char *name;
};
struct ini_parser {
bool (*parser) (void *ctx, const char *file, struct collection_item **vals, int nval);
struct ini_entry *entries;
};
这是我的初始化程序:
static struct ini_parser parsers[] = {
{NULL, &(struct ini_entry) {"test", "xxx"}}
};
我需要在初始化程序中添加更多ini_entry
。无论如何在单个声明中使用静态初始化来执行此操作吗?
抱歉我的英文。
答案 0 :(得分:0)
首先,如果您打算使用struct literal初始化它,struct ini_entry *entries;
应该是struct ini_entry const *entries;
(即使您没有)。
但是这种布局可能更容易阅读:
struct ini_entry const foo_entries[] = {
{ "test", "xxx" },
{ "flub", "yyy" },
{ "gnas", "zzz" },
{ NULL, NULL } // list terminator presumably required
};
struct ini_parser const parsers[] = {
{ "foo", foo_entries },
{ "bar", bar_entries }
};
请注意,可以使用计数列表而不是使用结束哨兵;列表的长度是编译时常量(sizeof foo_entries / sizeof foo_entries[0])
,您可以将其作为struct ini_parser
的第三个成员。