Изменение работы блока CODE

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Ответить
Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Изменение работы блока CODE

#1

Сообщение Слимпер » 21.12.2016{, 20:03}

Разрабатывая ряд блоков, разбирая работу ряда библиотек открыл 
В коде библиотеки существует несколько вариантов кода для одно и той же функции, но компилируется один из них в зависимости от железа (типа контроллера), или в зависимости от нескольких конфигурационных параметров которые задаются перед объявлением библиотеки.
Это позволило бы создавать многофункциональные блоки с довольно оптимальным по объему.

О самих командах позволяющих  компилировать только нужны код, можно почитать здесь Директивы условной компиляции
Применить их в FLProg не получилось, но это и не сильно нужно, если код довольно большой то лучше его перенести в библиотеку. 

Но и тут не получилось переменить, так как, для использование этих функций надо сперва объявить директивы.  Подробнее про них #define

Вот две главные особенности работы FLProg которые не позволили применит эту идею:

1. Перенос всех строк объявления библиотек (#include) в начало кода. А как я уже писал выше перед до объявлении библиотеки надо объявить несколько строк в директивой  #define.

2. Не работает подстановка параметров пользователя в области после директивой  #define.

Пример того как сейчас и как надо  
  
СпойлерПоказать
Вложения
6973460.png

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Изменение работы блока CODE

#2

Сообщение support » 21.12.2016{, 20:05}

Понял, подумаю.
Автор программы FLProg.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Изменение работы блока CODE

#3

Сообщение Слимпер » 13.01.2017{, 14:12}

Как мне представляется это не должно быть очень сложно.

Если подстановка после директивы #define параметра это проблемам, то можно сделать еще один тип параметра который при компиляции будет не заменятся в коде, а преобразовываться в директивы  #define. Может так будет даже лучше.

Добавлено (13.01.2017, 14:12)
---------------------------------------------
Здравствуй. В версии 2.3  было добавлена галка: 
Вставлять в код  без скобок ( как есть). 
Большое спасибо. Уже применял. 

Но вопрос, а чем вызвано  то, что эта функция не работает в секции Declare (точнее не полностью работает), т.е  можно использовать только как параметр при создании экземпляров классов. 

Я просто все пытаюсь найти способ оптимизации блоков  
и сильно не хватает  возможность использовать декларацию #define подставляя в нее значения не получается. 
Думал, что подстановка в код  строки решит эту задачу, но не вышло 

Просто полноценно использование директивы #define , позволит использовать директивы   

#if, #else, #elif и #endif  и #ifdef u #ifndef 

И тем самым исключать часть  кода в блоке в зависимости от  параметров в блока 

И еще большая просьба: 

Проверти как у вас в обработчик проверяет блок на корректность  
добавление  декорации  #endif  секции Declare вызывает сообщение о некорректности блока

Александр
Рядовой
Сообщения: 71
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

Изменение работы блока CODE

#4

Сообщение Александр » 21.12.2018{, 16:00}

Слимпер писал(а):
21.12.2016{, 20:03}
2. Не работает подстановка параметров пользователя в области после директивой #define.
Слимпер писал(а):
13.01.2017{, 14:12}
Если подстановка после директивы #define параметра это проблемам, то можно сделать еще один тип параметра который при компиляции будет не заменятся в коде, а преобразовываться в директивы #define. Может так будет даже лучше.
Вот и я застопорился на вставке константы из параметров пользователя в #define
Есть-ли какие-то подвижки в данном направлении?
Очень, иногда, необходима.

Ответить

Вернуться в «Новые»