Запутался в typedef, пример для FastLED
- Войдите на сайт для отправки комментариев
Ср, 15/01/2020 - 04:11
Вот тут нашел пример создания списка функций и с доп параметрами. https://gist.github.com/kriegsman/841c8cd66ed40c6ecaae
Но он не компилируется.
'confetti' was not declared in this scope
и другие функции так же, функции там ниже есть.
Я никак не пойму, что он тут делает.
typedef void (*SimplePattern)(); typedef SimplePattern SimplePatternList[]; typedef struct { SimplePattern mPattern; uint16_t mTime; } PatternAndTime; typedef PatternAndTime PatternAndTimeList[]; // These times are in seconds, but could be changed to milliseconds if desired; // there's some discussion further below. const PatternAndTimeList gPlaylist = { { confetti, 5 }, { juggle, 10 }, { bpm, 10 }, { rainbowWithGlitter, 5 }, { juggle, 5 }, { applause, 10 }, { fadeToBlack, 3 } };
Зачем столько typedef и почему все равно не работает?
Судя по ошибке, typedef-ы тут не причем.
функции где описаны? - ниже по программе?
переместите их описание выше вашего плейлиста и попробуйте скомпилировать еще раз
А можно поместить в начале только декларации
А можно поместить в начале только декларации
Работает, но вместе в FastLed идет пример DemoReel100.ino
Я так понял это старая версия. И там список функций объявлен как:
И он работает без объявления в начале. Почему?
И он работает без объявления в начале. Почему?
Если в первом примере переместить SimplePatternList после setup() то тоже будет компилиться без предварительного объеявления.
Вообще, в С\С++ имена всегда должны быть декларированы до испозования. Ардуино IDE пытается сделать жизнь начинающих делая это за них у себя внутри, но, видимо, не всегда получается.
А может кто0нибудь описать по строчкам что происходит тут?
typedef void (*SimplePattern)();
ну тут объявляется новый тип для ссылки на функцию
typedef SimplePattern SimplePatternList[];
это еще один новый тип массив [] из ссылок? а разве массив это тоже тип данных? вроде же массив это не само по себе, а сначала тип внутри ячейки, а потом размер?
typedef struct { SimplePattern mPattern; uint16_t mTime; } PatternAndTime;
typedef PatternAndTime PatternAndTimeList[];
вроде же массив это не само по себе, а сначала тип внутри ячейки, а потом размер?
Массив в стиле C это просто непрерывный блок памяти кратный размеру элементов и ничего более. Размер учитывается отдельно.
Массив в стиле C это просто непрерывный блок памяти кратный размеру элементов и ничего более. Размер учитывается отдельно.
С умным видом изрек банальность rkit. Так ничего толком и не ответив по существу заданного вопроса.
Sakolua. Сейчас, доберусь до компа и объясню. С телефона неудобно.
Объясняю:
21-й век на дворе, а про using тут так никто ничо и не знает.
А вот зачем вообще делать typedef для []
Если мы делаем обычный массив
typedef PatternAndTime PatternAndTimeList[];
Имею ввиду зачем это? И почему просто не PatternAndTime[]
typedef PatternAndTime PatternAndTimeList[];
Имею ввиду зачем это? И почему просто не PatternAndTime[]
Я же писал, эта строчка здесь вообще от балды и ее можно удалить.
typedef SimplePattern SimplePatternList[]; Тут вообще не при делах и эту строчку можно смело выкинуть.
не, то другая строка была
Sakolua, ну, почитайте Вы уже книжку по языку, ну что ж Вы тычетесь, как слепой котёнок, аж жалко Вас. Если Вы надеетесь освоить язык методом тыка и догадок, что написано в чужих кодах - не надейтесь - не освоите. Читаю Ваш первый пост ... ужас, у Вас не хватает знаний даже, чтобы задать вопрос, не то, чтобы найти ответ на него.
Так я и читаю, но в книгах не приводят примеры когда 10 строк сокращают в одну.
Вот структура, а вот тип, а что значит если все это в одну строку толкать и главное зачем? Фиг знает.