На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: JoeUser, Qraizer, Hsilgos
  
> Условная компиляция
Как препроцессор с помощью условной компиляции даёт понять компилятору, что часть программы необходимо скомпилировать или пропустить?
Путем выкидывания/включения части кода помеченной директивами препроцессора.
Типа написал ты там

ExpandedWrap disabled
    #if defined __WIN32
    ololo
    #else
    trololo
    #endif

Перед компиляцией проходит такой препроцессор и смотрит - ага макрос __WIN32 определен, значит вместо этого блока всего в файл на выходе записать строку ololo. А уж потом этот файл компилятор начинает обрабатывать.
В компиляторе можно включить настройку - генерировать файл препроцессора, чтобы посмотреть что сгенерировал препроцессор. Т.е. по факту что будет компилироваться.
По сути препроцессор - это что то типа Найти и заменить.
Сообщение отредактировано: Wound -
А если не генерировать, то будет создан этакий "файл" в памяти?
Цитата Славян @
то будет создан этакий "файл" в памяти?
Нет, тогда он не генерится в памяти целиком, а прямо в ходе генерации передаётся на компиляцию. В первых компиляторах файл в любом случае писался на диск, но для человека он немного по-другому оформлялся, из него выбрасывалась информация о номерах строк и т.п., нужная для сообщений об ошибках на последующих этапах компиляции.

Wound немного неточно написал, хотя суть от этого не меняется. Препроцессор не вставляет тот или иной текст а свой результат. Он просто читает входной файл(файлы) строка за строкой. Встретив директиву #include начинает читать указанный в ней файл, когда тот закончится продолжает читать текущий. Встретив любой #if, проверяет условие и если оно не выполняется начинает выбрасывать все строки, пока не встретит #endif или #else. Если же условие выполнено, то строки после #if передаются на выход. В таком случае строки пропускаются после #else.
Перед проверкой сток на предмет директив препроцессор убирает комментарии, а в передаваемых на выход строках выполняет подстановку макросов.
Первые варианты препроцессора С умещались в пару сотен строк текста. Сейчас препроцессору добавили ещё несколько функций и ему ещё риходится производить предварительный разбор текста.
Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1062 ]   [ 20 queries used ]   [ Generated: 14.12.18, 00:41 GMT ]