Инициализация рекурсивной структуры в С
Как можно выполнить, на этапе компиляции, инициализацию рекурсивной структуры? Вот пример кода
struct menu_item {
char name_menu[20];
int level_menu;
bool visible;
struct menu_item *sub_menu[];
};
struct menu_item main_menu[] = { {"First item", 0, true, {}},
{"Second item", 0, true, {}},
{"The third item", 0, true, { {"First sub item", 0, true, {}},
{"Second sub item", 0, true, {}},
{"The third sub item", 0, true, {}},
{"Fourth sub item", 0, true, {}}
}},
{"Fourth item", 0, true, {}}
};
Вот так не работает
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Если поправить тип поля sub_menu, то можно создать нужную вам структуру. Ещё надо будет добавить n_sub_menus - указатели не хранят размер массива, на который ссылаются:
struct menu_item {
char name_menu[20];
int level_menu;
bool visible;
int n_sub_menus;
struct menu_item *sub_menu;
};
struct menu_item sub_items[] = { {"First sub item", 0, true, 0, NULL},
{"Second sub item", 0, true, 0, NULL},
{"The third sub item", 0, true, 0, NULL},
{"Fourth sub item", 0, true, 0, NULL}
};
struct menu_item main_menu[] = { {"First item", 0, true, 0, NULL},
{"Second item", 0, true, 0, NULL},
{"The third item", 0, true, 4, sub_items},
{"Fourth item", 0, true, 0, NULL}
};