<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=386865&amp;view=findpost&amp;p=3434906</guid>
        <pubDate>Mon, 24 Mar 2014 06:31:17 +0000</pubDate>
        <title>(Компилятор) Управление опциями компиляции</title>
        <link>https://forum.sources.ru/index.php?showtopic=386865&amp;view=findpost&amp;p=3434906</link>
        <description><![CDATA[Fr0sT: Если мой вариант рассматривать как отвертку, твой - это навороченный шуруповерт )) для больших проектов, возможно, лучше, для локальных применений - чересчур громоздок.]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=386865&amp;view=findpost&amp;p=3433612</guid>
        <pubDate>Thu, 20 Mar 2014 11:14:09 +0000</pubDate>
        <title>(Компилятор) Управление опциями компиляции</title>
        <link>https://forum.sources.ru/index.php?showtopic=386865&amp;view=findpost&amp;p=3433612</link>
        <description><![CDATA[jack128: обычно определяют два файлика примерно такого вида:<br>
<br>
Es.SaveSwitches.inc<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{$if defined(EsSaveSwitches_Included)}</div><div class="code_line">&nbsp;&nbsp; &nbsp;Вложеные инклюды файлов Es.SaveSwitches.inc/Es.RestoreSwitches - НЕ ПОДДЕРЖИВАЮТСЯ</div><div class="code_line">{$ifend}</div><div class="code_line">&nbsp;</div><div class="code_line">{$define EsSaveSwitches_Included}</div><div class="code_line">&nbsp;</div><div class="code_line">{$IFOPT R+}</div><div class="code_line">&nbsp;&nbsp;{$define Es_R_plus}</div><div class="code_line">{$endif}</div><div class="code_line">&nbsp;</div><div class="code_line">{$IFOPT Q+}</div><div class="code_line">&nbsp;&nbsp;{$define Es_Q_plus}</div><div class="code_line">{$endif}</div><div class="code_line">&nbsp;</div><div class="code_line">{$IFOPT J+}</div><div class="code_line">&nbsp;&nbsp;{$define Es_J_plus}</div><div class="code_line">{$endif}</div><div class="code_line">&nbsp;</div><div class="code_line">{$IFOPT B+}</div><div class="code_line">&nbsp;&nbsp;{$define Es_B_plus}</div><div class="code_line">{$endif}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<br>
Es.RestoreSwitches.inc<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{$if not defined(EsSaveSwitches_Included)}</div><div class="code_line">&nbsp;&nbsp;Не был включен файл Es.SaveSwitches.inc</div><div class="code_line">{$ifend}</div><div class="code_line">&nbsp;</div><div class="code_line">{$undef EsSaveSwitches_Included}</div><div class="code_line">&nbsp;</div><div class="code_line">{$if defined(Es_R_plus)}</div><div class="code_line">&nbsp;&nbsp;{$R+}</div><div class="code_line">&nbsp;&nbsp;{$undef Es_R_plus}</div><div class="code_line">{$else}</div><div class="code_line">&nbsp;&nbsp;{$R-}</div><div class="code_line">{$ifend}</div><div class="code_line">&nbsp;</div><div class="code_line">{$if defined(Es_Q_plus)}</div><div class="code_line">&nbsp;&nbsp;{$Q+}</div><div class="code_line">&nbsp;&nbsp;{$undef Es_Q_plus}</div><div class="code_line">{$else}</div><div class="code_line">&nbsp;&nbsp;{$Q-}</div><div class="code_line">{$ifend}</div><div class="code_line">&nbsp;</div><div class="code_line">{$if defined(Es_J_plus)}</div><div class="code_line">&nbsp;&nbsp;{$J+}</div><div class="code_line">&nbsp;&nbsp;{$undef Es_J_plus}</div><div class="code_line">{$else}</div><div class="code_line">&nbsp;&nbsp;{$J-}</div><div class="code_line">{$ifend}</div><div class="code_line">&nbsp;</div><div class="code_line">{$if defined(Es_B_plus)}</div><div class="code_line">&nbsp;&nbsp;{$B+}</div><div class="code_line">&nbsp;&nbsp;{$undef Es_B_plus}</div><div class="code_line">{$else}</div><div class="code_line">&nbsp;&nbsp;{$B-}</div><div class="code_line">{$ifend}</div></ol></div></div></div></div><br>
<br>
соответственно пользовательский код примерно так будет выглядить:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{I Es.SaveSwitches.inc}</div><div class="code_line">{$R-}{$Q-}{$B+}</div><div class="code_line">function MyInc(B: Byte): Byte;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;// мой супер пупер код</div><div class="code_line">end;</div><div class="code_line">{$I Es.ReporeSwitches.inc}</div></ol></div></div></div></div>]]></description>
        <author>jack128</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=386865&amp;view=findpost&amp;p=3413252</guid>
        <pubDate>Wed, 12 Feb 2014 06:18:36 +0000</pubDate>
        <title>(Компилятор) Управление опциями компиляции</title>
        <link>https://forum.sources.ru/index.php?showtopic=386865&amp;view=findpost&amp;p=3413252</link>
        <description><![CDATA[Fr0sT: <strong class='tag-b'><span class="tag-color tag-color-named" data-value="purple" style="color: purple"><span class='tag-size' data-value='14' style='font-size:14pt;'>Управление опциями компиляции внутри текста программы</span></span></strong><br>
<br>
Все умеют управлять опциями компилятора внутри программы, через директивы {&#036;X+/-} либо {&#036;OPTIONNAME ON/OFF}. Однако при этом есть одна проблемка: затирается глобальное значение данной опции, установленное в свойствах проекта либо в начале модуля. Какой-то код, расположенный ниже примененного передергивания опции, мог рассчитывать на другое значение; могут появиться непредвиденные посторонние эффекты. Самый очевидный из них - неотлов переполнения чисел или выхода за границы массива в debug версии; но вполне вероятны и более деструктивные и неожиданные последствия.<br>
К счастью, есть способ определить, была ли установлена опция, а значит, можно и возвращать ее прежнее значение, и значит, исключить побочные эффекты.<br>
<br>
Инициализация: запоминаем состояние опции.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{$IFOPT R+}</div><div class="code_line">&nbsp;&nbsp;{$DEFINE RangeCheckOn}</div><div class="code_line">{$ENDIF}</div></ol></div></div></div></div><br>
<br>
Применение: условное включение опции<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{$R-}</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">{$IFDEF RangeCheckOn}</div><div class="code_line">&nbsp;&nbsp;{$R+}</div><div class="code_line">{$ENDIF}</div></ol></div></div></div></div>]]></description>
        <author>Fr0sT</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      </channel>
      </rss>
	