Глава 4. Препроцессор____________________________________79_

Роль препроцессора в общей картине

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

Препроцессор не вызывается прямо; он запускается при компиляции и "бежит впереди" самого компилятора. Здесь не будут разбираться все детали его реализации — в этой главе преследуется цель дать лишь общее представление о его назначении и возможностях.

При компиляции программ препроцессор незаметно делает свое дело. Когда в тексте встречается символ #, препроцессор расценивает его как указание, что следом за ним идет ключевое слово — директива, предписывающая ему некоторые действия с последующим в этой строке текстом. Например,

ttinciude <iostream.h>

предписывает препроцессору включить в исходный код текст, содержащийся в файле iostream.h. Знаки о вокруг имени файла указывают, что файл iostream.h следует искать в каталоге, заданном в системной переменной PATH или в пути поиска проекта (другими словами, файл должен быть доступен).

В другом варианте директивы #include имя файла заключается в двойные кавычки:

#include "iostream.h"

Двойные кавычки вокруг имени файла указывают, что включаемый файл должен находиться в текущем (или рабочем) каталоге.

Ранее вы видели пример того, как используется директива ftdefine для обозначения подстановки фрагмента текста — везде в тексте, где встречается символ Trap (), он заменяется на { asm int 0х03 }. В следующих разделах будут приведены другие случаи применения препроцессора, и еще множество удачных примеров вам встретится на протяжении книги.

После всех замен и подстановок текста начинается собственно компиляция. При компиляции из заголовочных файлов (.h и .hpp) и программных модулей (.срр) создаются промежуточные двоичные файлы с расширением .obj. В файле определений (.def) описывается необходимое программе количество памяти или куча (heap), а также размер стека (если файл определений не задан, компилятор по умолчанию использует модуль \Bc5\Lib\Default.def). Файл описания ресурсов (.гс) определяет внешние ресурсы, формирующие "лицо" вашей программы.

Объектные файлы создаются для каждого исходного модуля (.срр), входящего в программу, при необходимости дополнительно к ним можно подключать также уже существующие. Когда эти промежуточные файлы (это