Разрабатывая ряд блоков, разбирая работу ряда библиотек открыл
В коде библиотеки существует несколько вариантов кода для одно и той же функции, но компилируется один из них в зависимости от железа (типа контроллера), или в зависимости от нескольких конфигурационных параметров которые задаются перед объявлением библиотеки.
Это позволило бы создавать многофункциональные блоки с довольно оптимальным по объему.
О самих командах позволяющих компилировать только нужны код, можно почитать здесь Директивы условной компиляции
Применить их в FLProg не получилось, но это и не сильно нужно, если код довольно большой то лучше его перенести в библиотеку.
Но и тут не получилось переменить, так как, для использование этих функций надо сперва объявить директивы. Подробнее про них #define
Вот две главные особенности работы FLProg которые не позволили применит эту идею:
1. Перенос всех строк объявления библиотек (#include) в начало кода. А как я уже писал выше перед до объявлении библиотеки надо объявить несколько строк в директивой #define.
2. Не работает подстановка параметров пользователя в области после директивой #define.
Пример того как сейчас и как надо
[spoiler=Спойлер][/spoiler]
Изменение работы блока CODE
Изменение работы блока CODE
Как мне представляется это не должно быть очень сложно.
Если подстановка после директивы #define параметра это проблемам, то можно сделать еще один тип параметра который при компиляции будет не заменятся в коде, а преобразовываться в директивы #define. Может так будет даже лучше.
Добавлено (13.01.2017, 14:12)
---------------------------------------------
Здравствуй. В версии 2.3 было добавлена галка:
Вставлять в код без скобок ( как есть).
Большое спасибо. Уже применял.
Но вопрос, а чем вызвано то, что эта функция не работает в секции Declare (точнее не полностью работает), т.е можно использовать только как параметр при создании экземпляров классов.
Я просто все пытаюсь найти способ оптимизации блоков
и сильно не хватает возможность использовать декларацию #define подставляя в нее значения не получается.
Думал, что подстановка в код строки решит эту задачу, но не вышло
Просто полноценно использование директивы #define , позволит использовать директивы
#if, #else, #elif и #endif и #ifdef u #ifndef
И тем самым исключать часть кода в блоке в зависимости от параметров в блока
И еще большая просьба:
Проверти как у вас в обработчик проверяет блок на корректность
добавление декорации #endif секции Declare вызывает сообщение о некорректности блока
Если подстановка после директивы #define параметра это проблемам, то можно сделать еще один тип параметра который при компиляции будет не заменятся в коде, а преобразовываться в директивы #define. Может так будет даже лучше.
Добавлено (13.01.2017, 14:12)
---------------------------------------------
Здравствуй. В версии 2.3 было добавлена галка:
Вставлять в код без скобок ( как есть).
Большое спасибо. Уже применял.
Но вопрос, а чем вызвано то, что эта функция не работает в секции Declare (точнее не полностью работает), т.е можно использовать только как параметр при создании экземпляров классов.
Я просто все пытаюсь найти способ оптимизации блоков
и сильно не хватает возможность использовать декларацию #define подставляя в нее значения не получается.
Думал, что подстановка в код строки решит эту задачу, но не вышло
Просто полноценно использование директивы #define , позволит использовать директивы
#if, #else, #elif и #endif и #ifdef u #ifndef
И тем самым исключать часть кода в блоке в зависимости от параметров в блока
И еще большая просьба:
Проверти как у вас в обработчик проверяет блок на корректность
добавление декорации #endif секции Declare вызывает сообщение о некорректности блока
-
- Рядовой
- Сообщения: 85
- Зарегистрирован: 01 дек 2015, 15:49
- Откуда: Бобруйск
- Имя: Александр
- Поблагодарили: 2 раза
Изменение работы блока CODE
Слимпер писал(а): 21 дек 2016, 20:032. Не работает подстановка параметров пользователя в области после директивой #define.
Вот и я застопорился на вставке константы из параметров пользователя в #defineСлимпер писал(а): 13 янв 2017, 14:12Если подстановка после директивы #define параметра это проблемам, то можно сделать еще один тип параметра который при компиляции будет не заменятся в коде, а преобразовываться в директивы #define. Может так будет даже лучше.
Есть-ли какие-то подвижки в данном направлении?
Очень, иногда, необходима.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость