<?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=413856&amp;view=findpost&amp;p=3784444</guid>
        <pubDate>Tue, 04 Dec 2018 19:38:17 +0000</pubDate>
        <title>Условная компиляция</title>
        <link>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784444</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413856&view=findpost&p=3784438'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2018-12-04T19:14:59+03:00">04.12.18, 16:14</time></span><div class='quote '>то будет создан этакий &quot;файл&quot; в памяти?</div></div> Нет, тогда он не генерится в памяти целиком, а прямо в ходе генерации передаётся на компиляцию. В первых компиляторах файл в любом случае писался на диск, но для человека он немного по-другому оформлялся, из него выбрасывалась информация о номерах строк и т.п., нужная для сообщений об ошибках на последующих этапах компиляции.<br>
<br>
<strong class='tag-b'>Wound</strong> немного неточно написал, хотя суть от этого не меняется. Препроцессор не вставляет тот или иной текст а свой результат. Он просто читает входной файл(файлы) строка за строкой. Встретив директиву #include начинает читать указанный в ней файл, когда тот закончится продолжает читать текущий. Встретив любой #if, проверяет условие и если оно не выполняется начинает выбрасывать все строки, пока не встретит #endif или #else. Если же условие выполнено, то строки после #if передаются на выход. В таком случае строки пропускаются после #else.<br>
Перед проверкой сток на предмет директив препроцессор убирает комментарии, а в передаваемых на выход строках выполняет подстановку макросов.<br>
Первые варианты препроцессора С умещались в пару сотен строк текста. Сейчас препроцессору добавили ещё несколько функций и ему ещё риходится производить предварительный разбор текста.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784438</guid>
        <pubDate>Tue, 04 Dec 2018 16:14:59 +0000</pubDate>
        <title>Условная компиляция</title>
        <link>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784438</link>
        <description><![CDATA[Славян: А если не генерировать, то будет создан этакий &quot;файл&quot; в памяти?]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784435</guid>
        <pubDate>Tue, 04 Dec 2018 15:14:02 +0000</pubDate>
        <title>Условная компиляция</title>
        <link>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784435</link>
        <description><![CDATA[Wound: Путем выкидывания/включения части кода помеченной директивами препроцессора. <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">#if defined __WIN32</div><div class="code_line">ololo</div><div class="code_line">#else </div><div class="code_line">trololo</div><div class="code_line">#endif</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Перед компиляцией проходит такой препроцессор и смотрит - ага макрос __WIN32 определен, значит вместо этого блока всего в файл на выходе записать строку ololo. А уж потом этот файл компилятор начинает обрабатывать.<br>
В компиляторе можно включить настройку - генерировать файл препроцессора, чтобы посмотреть что сгенерировал препроцессор. Т.е. по факту что будет компилироваться.<br>
По сути препроцессор - это что то типа Найти и заменить.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784429</guid>
        <pubDate>Tue, 04 Dec 2018 13:41:00 +0000</pubDate>
        <title>Условная компиляция</title>
        <link>https://forum.sources.ru/index.php?showtopic=413856&amp;view=findpost&amp;p=3784429</link>
        <description><![CDATA[ihoreka: Как препроцессор с помощью условной компиляции даёт понять компилятору, что часть программы необходимо скомпилировать или пропустить?]]></description>
        <author>ihoreka</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	