Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры_по_порядку_прога_1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
413.64 Кб
Скачать

18.4. Компоновка нескольких файлов в одну программу

С помощью компилятора текст преобразуется в исполняемый файл. Обработка исходных файлов происходит в три этапа. Сначала файл обрабатывается препроцессором, который выполняет операторы #include, #define и еще несколько других. Затем, на втором этапе, компилятор создает объектный файл, в котором имеются ссылки на различные системные функции и на стандартные функции языка C++. На третьем этапе компиляции к объектному файлу подсоединяются все функции на которые он ссылается.

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

Исполняемая программа представляет собой непрерывный блок, который состоит из четырех частей: --Програмный код --Глобальные переменные --Куча (Heap) , где хранятся динамические переменные --Стек (stack).

В стеке хранятся:

-Адреса возврата из функций -Значения аргументов функций -Локальные переменные

В языке Си существует строгое правило, в соответствии с которым все переменные и функции должны быть объявлены или определены.

В программе должно быть только одно определение функции. Удобно было бы поместить Определение функции в отдельный файл, а в других файлах в начале помещать лишь объявление, прототип функции.

Пример использования указателей на функции Последовательность действий следующая: Создать файл point_function.cpp

Создать файл function.cpp

Создать файл function.h

18.5. Директивы препроцессора

Назначение препроцессора - обработка исходного текста программы до ее компиляции.

Препроцессор обрабатывает собственные директивы. Эти директивы задаются, как правило, в отдельной строке и начинаются с символа ’#’.

В языке C++ можно задать следующие директивы препроцессора: ·       директивы компилятора #pragma, указывающие компилятору, как именно необходимо строить объектный код; ·       директива включения файла #include, с помощью которой можно включить в текст программы текст из другого файла;

·       директивы условной компиляции

#if, #else, #elif, #endif, #ifdef, #ifndef, defined; ·       директива определения лексем #define; ·       директива отмены определения #undef

Директива #include может быть записана в одном из двух форматов: #include <имяфайла> и #include имяфайла” Первый формат позволяет включить имя файла из тех папок, которые заданы как стандартные для хранения включаемых файлов.Второй формат дает возможность записать произвольное имя файла.

Директива #define позволяет определить новые лексемы. Ее формат: #define имялексемы [ (параметры) ] текстлексемы Лексемы с параметрами называют макроопределениями( макросами). Такие конструкции позволяют выполнить замещение лексем по-разному, в зависимости от фактических параметров.