Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2017, 22:09   #1
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию Условная компиляция

Здравстствуйте!
Подскажите, плиз
Если в локальной функции исользуется директива {Q-}
нужно ли отменять их {Q+} вообще или в конце функции ?

Пример
Код:
Function Sum (const a,b:word):word;
begin
{Q+}
sum:=a+b;
{Q-}
end;
Или по завершении функции, компилятор использует ключи указанные в глобальных настройках проекта?

Последний раз редактировалось Turbine; 01.07.2017 в 22:11.
Turbine вне форума Ответить с цитированием
Старый 02.07.2017, 01:39   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Да, надо отключать вручную. И директивы с долларом пишутся {$Q+}
Локальные директивы действуют с того места где встретились и до самого конца компиляции (или до места где их отключат вручную). Причём, они начинают действовать не с места когда код начал выполнятся в рантайме, а с места где их нашёл компилятор. Так что даже если программа не дошла до того места где эта директива была прописана в исходнике, то она уже может быть активна (такое наблюдается, например, в оконных приложениях). Чтобы такой чертовщины не было, нужно обязательно вернуть директиву в прежнее состояние сразу после того, как дело сделано, т.е в данном случае внутри функции
http://docwiki.embarcadero.com/RADSt...ler_directives

Если эффекта не будет видно, то туда ещё нужно глянуть http://docwiki.embarcadero.com/RADSt...cking_(Delphi)
eoln вне форума Ответить с цитированием
Старый 02.07.2017, 05:18   #3
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Спасибо!
Т.е. если в Project-Options-Compiling установлено {$Q+},
а в какой-то процедуре/функции употребляется {$Q+}, а потом {$Q-},
то после КОМПИЛЯЦИИ этой функции, все оставшиеся фцнкции и процедуры будут компилироваться с {$Q-}?

и как проверить, состояние, например той же самой директивы компиляции {$Q+} она или {$Q-}? С помощью $IFOPT?

Последний раз редактировалось Turbine; 02.07.2017 в 05:37.
Turbine вне форума Ответить с цитированием
Старый 02.07.2017, 10:41   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Цитата:
после КОМПИЛЯЦИИ этой функции, все оставшиеся фцнкции и процедуры будут компилироваться с {$Q-}?
да. поэтому перед выходом из функции нужно вернуть директивы по умолчанию(те, что в Project-Options-Compiling), иначе могут появится артефакты

Цитата:
С помощью $IFOPT?
да.
http://docs.embarcadero.com/products...ctive_xml.html
http://www.delphibasics.ru/$IfOpt.php

Последний раз редактировалось eoln; 02.07.2017 в 10:49.
eoln вне форума Ответить с цитированием
Старый 02.07.2017, 19:48   #5
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Примерно так?

Код:
{$IFOPT I+} {$I-} {$DEFINE IPLUS}{$ENDIF}
{$IFOPT Q+} {$Q-} {$DEFINE QPLUS}{$ENDIF}
{$IFOPT R+} {$R-} {$DEFINE RPLUS}{$ENDIF}

{$IFDEF IPLUS} {$I+} {$UNDEF IPLUS} {$ENDIF IPLUS}
{$IFDEF RPLUS} {$R+} {$UNDEF RPLUS} {$ENDIF RPLUS}
{$IFDEF QPLUS} {$Q+} {$UNDEF QPLUS} {$ENDIF QPLUS}
Turbine вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Условная компиляция" в ворде cw_o Microsoft Office Word 6 05.04.2013 14:00
Условная компиляция, GNU против MSVS EUGY Общие вопросы C/C++ 5 17.12.2012 10:58
Условная компиляция Camaro Chevelle Помощь студентам 0 09.11.2011 14:55
Условная компиляция Arigato Общие вопросы Delphi 7 11.09.2010 07:10
Условная компиляция. Пепел Феникса Общие вопросы Delphi 6 25.05.2010 21:36