Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с препроцессором / 8 сообщений из 8, страница 1 из 1
15.05.2020, 12:43
    #39957945
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
Хочу вклеить в App время компиляции.
Для теста написал 2 модуля:
1-й: tst1.prg
Код: vbnet
1.
2.
3.
4.
5.
#ifdef buildtime
	=MESSAGEBOX('Определено')
#else
	=MESSAGEBOX('Не определено')
#endif 


2-й:
Код: vbnet
1.
2.
3.
#Define buildtime DATETIME()
Compile tst1
Build App test2.App From "test2"



Проект test2 содержит только модуль tst1.prg

По задумке при перестроении проекта должно вклеиться время компиляции. При прямом запуске покажет, что режим отладки.
Однако, при запуске test2.App как при запуске tst1.prg пишет "Не определено".

как-то я не понимаю этот препроцессор...
...
Рейтинг: 0 / 0
15.05.2020, 14:58
    #39958028
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
glamis,
а вы временем компиляции что называете? Или думаете, что Build все файлы автоматом перекомпилирует? И с чего решили, что define перед Build хоть как-то виден при компиляции prg, которая была до build?
...
Рейтинг: 0 / 0
15.05.2020, 16:45
    #39958086
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
glamis,
предлагаю вариант без плясок с бубном.

Код: sql
1.
2.
adir(aFiles, 'test2.App')
?aFiles[3], aFiles[4]
...
Рейтинг: 0 / 0
15.05.2020, 22:06
    #39958230
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
prg - это исходник. Текст, написанный так, чтобы его понял разработчик. Но само приложение работает не с исходником, а с "переводом" этого самого исходника в некий "машинный" код. Этот "перевод" выполняет операция, называемая "компиляция"

Директивы препроцессора - это то, что надо сделать непосредственно перед компиляцией. Т.е. перед тем, как начать процедуру компиляции вот все эти директивы выполняются и происходит замена соответствующих кусков кода

Ну, чтобы было понятно, это вы даете инструкцию переводчику о том, какие куски текста и в какой последовательности надо переводить с "человеческого" на "машинный". "Здесь - читаем, здесь - не читаем, а здесь мы рыбу заворачивали" (с)

Но после "перевода" в итоговом, откомпилированном коде (который, собственно, и будет исполняться) уже никаких директив препроцессора нет. Там уже результат замены

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

Надо использовать галку Recompile All, чтобы повторно скомпилировать то, что ранее уже было скомпилировано. Заново из prg сделать fxp с учетом текущего состояния директив препроцессора
...
Рейтинг: 0 / 0
17.05.2020, 09:26
    #39958519
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
ВладимирМ,

Вот я и рассчитывал, что если вызову компиляцию из программы, то можно будет использовать #ifdef для модификации кода- если определено, то один набор команд, если нет - другой.

И обратите внимание-я принудительно компилирую код перед вызовом build.
...
Рейтинг: 0 / 0
17.05.2020, 14:26
    #39958601
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
glamis
И обратите внимание-я принудительно компилирую код перед вызовом build.
Обратили, сразу при чтении. И что это меняет? Откуда уверенность, что определенный ВНЕ файла tst1
Код: sql
1.
#Define buildtime DATETIME()

виден/работает при компиляции
Код: sql
1.
Compile tst1

?

Вариант решения без танцев с бубном я уже предложил.
...
Рейтинг: 0 / 0
17.05.2020, 15:55
    #39958618
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
Sergey Sizov,

Ну, решение я нашел. И константу вклеил. Несколько коряво получилось. Но получилось.
Вариант вычисления через adir мне не нравится - может оказаться, что дата или время файла поменяются. В теории это возможно.
Но очень красиво было бы сделать через препроц.
...
Рейтинг: 0 / 0
18.05.2020, 15:52
    #39958983
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с препроцессором
glamis
И обратите внимание-я принудительно компилирую код перед вызовом build.

1. Директивый прекомпилятора действуют только в том файле, где они были определены

Если Ваши модули - это два отдельных файла, то константа, определенная в одном файле не будет видна в другом

2. Команду Compile имеет смысл применять только к свободно лежащим файлам. Т.е. модуль 1 не должен быть включен внутрь APP
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с препроцессором / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]