Инициализация рекурсивной структуры в С

Как можно выполнить, на этапе компиляции, инициализацию рекурсивной структуры? Вот пример кода

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}
                              };
→ Ссылка