Разбор принципа работы define

leejack
Offline
Зарегистрирован: 30.01.2014

Коллеги, вечер добрый!

Нужна помощь, неожидал, что я чего-то не пойму/не найду как работает следующая конструкция:

#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \
	extern menuItem Next;     \
	extern menuItem Previous; \
	extern menuItem Parent;   \
	extern menuItem Child;  \
	menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }}

Помогите разобрать устройство такой конструкции, пожалуйста, обратные слеши меня совсем в ступор ввели

После можно использовать этот дефайн для создания нового меню

MAKE_MENU(m1name, m2, NULL, NULL, subM2, 0, "Run");

Я не понимаю куда в этом случае пишаться данные и самое главное как! Дайте разбор полетов - либо дайте эту чертову ссылку с гугла. Потому что я не понимаю как искать.

Спасибо!

b707
Offline
Зарегистрирован: 26.05.2017

у меня этот макрос в новой версии Ардуино ИДе не заработал - он с ошибкой раскрывается. Правда, уже не помню, в чем там дело.

Кроме того, мне показалось что в этой системе дико неудобно писать длинные меню - так как в каждой строчке MENU_ITEM надо заново указывать названия всех этих Next Previous Parent итд

В итоге я бросил и написал свою систему меню с нуля - не такую навороченную. зато рабочую. В общем, в гугле разных  примеров меню много, этот я не рекомендую.

leejack
Offline
Зарегистрирован: 30.01.2014

b707,  да я бы уже сам бросил это дело! Но теперь дело принципа. Я не понимаю как это должно функционировать (если это невозможно сейчас написать на 1.8.0 или сейчас уже 1.8.2 пух с ним). Мне очень интересно что за магия) А написать другой, более простой алгоритм меню - конечно могу (это план Б) 

b707
Offline
Зарегистрирован: 26.05.2017

да никакой там магии нет.

Обратные слеши - это просто переход на новую строку.

Обьявления Next Previous сделано в виде extern, чтобы иметь возможность ссылаться на строчки, которые в этот момент еще не описаны...

В принципе, там все просто и понятно, И даже где-то в гугле я встречал подробное описание именно этого макроса - что и как.

PRC
Offline
Зарегистрирован: 03.02.2019

Не знаю, можно ли тут давать ссылки на другие сайты, но на изиэлектриниксе была статья с картинками как все это работает. Но всегда там можно найти по словам "Организация древовидного меню" или  в оригинале "MicroMenu".

leejack
Offline
Зарегистрирован: 30.01.2014

Спасибо, я поищу. Про оригинал статьи не подумал)) И за слеши спасиб!))