А зачем вообще так сложно? Нельзя ли просто иметь вот типа такую структуру:
typedef void(*menu_func) (void);
struct main_menu_item{
int level;
menu_func *function;
char * string_menu;
int type; // ну там чек, н-р, или номер картинки
};
и, соответственно, описание меню:
const main_menu_item menu[] =
{
{ 0, funcXX, "Пункт 1" },
{ 0, funcXX, "Пункт 2" },
{ 1, funcXX, "Пункт 2.1" },
{ 0, funcXX, "Пункт 3" },
{ 1, funcXX, "Пункт 3.1" },
{ 1, ..... },
{ 1, ..... },
{ 2, funcXX, "Пункт 3.3.1" },
{ 2, funcXX, "Пункт 3.3.2" },
{ 1, funcXX, "Пункт 3.4" },
{ 0, funcXX, "Пункт 4" },
};
там, где ф-ии не нужны, а нужно только раскрывать подменю, то, разумеется, заменить на нулптр.
Как вариант, не пользовать номер глубины, а 1, где нужно в подменю, 0 на том же уровне, -1... -n, для возврата на нужный уровень