Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_na_c.pdf
Скачиваний:
125
Добавлен:
06.02.2015
Размер:
665 Кб
Скачать

{операторы функции f1 } int f2()

{операторы функции f2 }

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

Сувеличением объема программы становится неудобно хранить ее

водном файле. Разбиение программы на функции является первым шагом в повышении уровня абстракции программы, следующий – группировка функций и связанных с ними данных в отдельные файлы (модули), компилируемые раздельно.

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

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

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

Модульность в языке С++ поддерживается с помощью директив препроцессора, пространств имен, классов памяти, исключений и раздельной компиляции.

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

2.1.5.1. Директива #include

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

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

Директива #include является простейшим средством обеспечения согласованности объявлений в различных файлах, включая в них ин-

15

формацию об интерфейсе из заголовочных файлов. Заголовочные файлы обычно имеют расширение .h и могут содержать:

определения типов, констант, встроенных функций, шаблонов, перечислений;

объявления функций, данных, имен, шаблонов;

пространства имен;

директивы препроцессора;

комментарии.

В заголовочном файле не должно быть определений функций и данных.

При указании заголовочных файлов стандартной библиотеки расширение .h можно опускать. Для каждого файла библиотеки С с именем <name.h> имеется соответствующий файл библиотеки С++ <cname>.

2.1.5.2. Директива #define

Директива #define определяет подстановку в тексте программы. Она используется для определения:

символических констант. Формат определения символической константы:

#define имя текст_подстановки /* Все вхождения имени заменяются на текст подстановки */

макросов, которые выглядят как функции, но реализуются подста-

новкой их текста в текст программы. Формат определения макроса [4]:

#define имя( параметры ) текст_подстановки

символов, управляющих условной компиляцией. Они используются вместе с директивами #ifdef и #ifndef.

Формат: #define имя

Пример. 1

#define M 1000

#define Vasia “Василий Иванович” #define MAX(a,b) ((x)>(y)?(x):(y)) #define __cplusplus

Параметры используются при макроподстановке, например, если в тексте программы используется вызов макроса y=MAX(sum1, sum2);, он будет заменен на y=((sum1)>(sum2)?(sum1):(sum2));

Использования макросов и символических констант в программах следует избегать.

16

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]