Программа на языке Си состоит из одного или более модулей. Каждый модуль компилируется отдельно от других. Разделение программы на модули выполняется на этапе проектирования. Каждый модуль содержит функции и данные, имеющие некоторое общее назначение, и его разработку (кодирование) выполняет обычно один разработчик.
Модуль в Си разделяется на два файла: 1) *заголовочный файл*, имеющий расширение ``.h`` и содержащий объявления функций, глобальных переменных и типов данных; 2) *файл реализации*, имеющий расширение ``.c`` и содержащий определения функций и глобальных переменных.
Можно сделать один заголовочный файл для нескольких модулей. Для модуля с главной функцией программы заголовочный файл обычно не создается. Заголовочный файл подключается обязательно к соответствующему файлу реализации и к тем модулям, которым необходим доступ к функциям, типам и переменным этого модуля. Подключение к другим модулям можно делать как в файле реализации, так и в заголовочном файле с помощью команды ``#include``. Добавлять файл реализации к программе нужно включая его в *проект*. В среде MinIDE проект создается автоматически из всех файлов, находящихся в текущей папке, если в файле локальных настроек указана строка ``build.goal=all``, в других средах разработки для управления проектом используется специальное окно.
Для получения исполняемого файла из исходных файлов на языке Си выполняются следующие действия:
1. Перед компиляцией каждый файл реализации обрабатывается **препроцессором**, который заменяет директивы ``#include`` на содержимое соответствующего заголовочного файла и применяет к исходному тексту все определения ``#define``.
2. Получившийся полный текст модуля **компилятор** транслирует в машинные коды и получается *объектный файл* с расширением ``.obj`` (в Linux -- с расширением ``.o``).
3. Для получения исполняемой программы **компоновщик** собирает объектные файлы программы и объектные файлы из библиотек ``.lib`` (в Linux -- архивов объектных файлов с расширением ``.a``).
![display:block;margin:auto|схема работы компилятора](11369.png)