А это стандарт такой в Си, что можно инициализировать только первый элемент в union.
Об этом можно на RSDN спросить, там любят стандарт обсуждать/цитировать.
А если делать универсальное, гибкое меню, то можно как-то так:
Код
struct ItemHeader
{
prog_char *text;
uint8_t type;
void *content;
};
struct Type1Item
{
union
{
uint8_t id;
int *num;
};
void (*func);
};
struct Type2Item
{
uint8_t vcnt;
uint8_t *vid;
prog_char **var;
};
PROGMEM Type1Item Item1 =
{
100, NULL
};
PROGMEM Type2Item Item2 =
{
50, NULL, NULL
};
PROGMEM char m1[] = {"Hello"};
PROGMEM char m2[] = {"Hello2"};
PROGMEM ItemHeader mainmenu[] =
{
{m1, 0, &Item1},
{m2, 1, &Item2},
};
ЗЫ. компилировал в С++ режиме
Сообщение отредактировал neiver - Jul 29 2010, 12:11