powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с препроцессором
8 сообщений из 8, страница 1 из 1
Помогите с препроцессором
    #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
Помогите с препроцессором
    #39958028
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamis,
а вы временем компиляции что называете? Или думаете, что Build все файлы автоматом перекомпилирует? И с чего решили, что define перед Build хоть как-то виден при компиляции prg, которая была до build?
...
Рейтинг: 0 / 0
Помогите с препроцессором
    #39958086
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamis,
предлагаю вариант без плясок с бубном.

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

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

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

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

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

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

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

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

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

?

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

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

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

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

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


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