Лайфхаки (Маленькие хитрости) А так можно было?!

CTAPuK
Рядовой
Сообщения: 68
Зарегистрирован: 06.12.2020{, 20:41}
Репутация: 10
Имя: Михаил

Лайфхаки (Маленькие хитрости) А так можно было?!

#21

Сообщение CTAPuK » 05.02.2023{, 10:41}

Phazz писал(а):
05.02.2023{, 10:10}
Это все прекрасно, пока одна такая функция. Или не добавят другой блок с таким же лайфаком)
Как раз на это я и нарвался, когда задавал вопрос: Новый редактор для создания пользовательских блоков.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Лайфхаки (Маленькие хитрости) А так можно было?!

#22

Сообщение Dryundel » 05.02.2023{, 11:30}

CTAPuK писал(а):
05.02.2023{, 10:41}
Как раз на это я и нарвался, когда задавал вопрос:
Посмотреть бы.
Примерчик в студию, будьте добры.

CTAPuK
Рядовой
Сообщения: 68
Зарегистрирован: 06.12.2020{, 20:41}
Репутация: 10
Имя: Михаил

Лайфхаки (Маленькие хитрости) А так можно было?!

#23

Сообщение CTAPuK » 05.02.2023{, 11:42}

Dryundel писал(а):
05.02.2023{, 11:30}
Посмотреть бы.
Примерчик в студию, будьте добры.
К сожалению привести пример уже не могу, так как переписал свой ПБ с учётом этого лайфхака, а старые версии ПБ уже удалил за ненадобностью.
Но смысл донес Phazz, когда в предыдущую функцию без "}", залетает последующая функция без "}". Таким образом последующая функция встраивается в тело предыдущей. Соответственно loop последующую функцию не видит и компилятор обижается.

Если необходимо, могу быстренько на коленке накидать эти ПБ, но с Вашим опытом работы в FLProg наверно этого не требуется.

Отправлено спустя 34 минуты 50 секунд:
P.S. Два ПБ с функциями: Func1 () и Func2 ()
СпойлерПоказать
void setup()
{
}
void loop()
{
//Плата:1
Func1 ();
Func2 ();
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
void Func1 ()
{
// Func1 ()
void Func2 ()
{
// Func2 ()
}
}


Компилятор:
'Func2' was not declared in this scope

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Лайфхаки (Маленькие хитрости) А так можно было?!

#24

Сообщение Dryundel » 05.02.2023{, 14:13}

CTAPuK писал(а):
05.02.2023{, 12:17}
Если необходимо, могу быстренько на коленке накидать эти ПБ
А где блоки то?
И в чем идея? Что во что Вы пытались встраивать? Для чего? Какие задачи стоят?
На сколько я помню Вы и пытались функцию в функцию запихать. Я Вам сказал, что так нельзя, а можно лишь вызывать одну из другой.

CTAPuK
Рядовой
Сообщения: 68
Зарегистрирован: 06.12.2020{, 20:41}
Репутация: 10
Имя: Михаил

Лайфхаки (Маленькие хитрости) А так можно было?!

#25

Сообщение CTAPuK » 05.02.2023{, 15:20}

Dryundel писал(а):
05.02.2023{, 14:13}
И в чем идея? Что во что Вы пытались встраивать? Для чего? Какие задачи стоят?
Вся эта масса частных вопросов не имеет никакого отношения к обсуждаемой теме.
Phazz, написал, что фокус с открытой фигурной скобкой в ПБ работает в том случае, если в скетче используется только один такой ПБ. Если их используется два и больше, то фокус не прокатывает, так как получается матрёшка: функция в функции, в функции, в функции... И я согласен с этим утверждением. Это не идея и не задача. Это уточнение для тех, кто захочет воспользоваться этим лайфхаком. В частности я воспользовался ПБ от artemka19, при этом у меня в скетче уже был свой ПБ с открытой скобкой. В результате поимел головняк, пока разбирался с кодом на 30-ти страницах, почему IDE не видит явно описанную функцию.

Но если у Вас есть иной опыт использования несколько разных "ПБ с открытой скобкой", с удовольствием у Вас поучусь.
Dryundel писал(а):
05.02.2023{, 14:13}
На сколько я помню Вы и пытались функцию в функцию запихать. Я Вам сказал, что так нельзя, а можно лишь вызывать одну из другой.
Вы не совсем верно помните. "Запихать" функцию в функцию нет никаких проблем. Я спрашивал о том, был ли у кого опыт вставки кода из "функции каждого экземпляра" в "функцию общего блока". Но я эту проблему решил, правда накладными расходами в виде избыточного кода, так как "ПБ без скобки" в скетче уже был от другого разработчика.

Ниже прикреплён пример с тремя такими блоками. Пример дан в качестве иллюстрации для подтверждения моих слов.

Допускаю, что у меня слишком мало опыта в написании ПБ. Приведите свой рабочий пример, где используется два и больше "ПБ без } в функции".
Вложения
Блоки.flp
(412.46 КБ) 26 скачиваний

Ответить

Вернуться в «Обучающие примеры работы в FLProg»