Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора по яп 2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
204.42 Кб
Скачать

33. Препроцессор. Директивы #include, #define.

Получение исполняемой программы из исходного текста на языке Си происходит в несколько этапов. На самом первом этапе с исходным текстом программы работает специальная программа - препроцессор. Основная цель препроцессора - за­кончить формирование исходного текста программы на Си. За­тем окончательный текст программы подвергается компиля­ции. Компиляция завершается генерацией объектного файла. После этого компоновщик формирует загрузочный модуль.

Директивы препроцессора и указания компилятору

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

Директивы позволяют:

  • описывать макро, которые уменьшают трудоемкость написания программы и делают текст программы удобочитаемым и выразительным.

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

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

Директива #include

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

Существуют следующие формы директивы:

#include <stdio.h>

#include “defs.h”

Препроцессор обрабатывает включаемый файл таким же образом, как если бы этот файл входил в состав исходного файла в точке, где записана директива #include

Имя пути представляет собой имя файла, которому может предшествовать имя устройства и спецификации директории. Синтаксис имени пути определяется соглашениями операционной системы.

Поиск файла, указанного в директиве зависит от имени пути, которое находится после объявления директивы #include:

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

  • если в кавычках нет полного пути, то препроцессор начинает поиск включаемого файла в текущей рабочей директории (где находится файл, в котором записана директива #include), затем в директориях, указанных в командной строке компиляции, затем в стандартных директориях.

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

Директива #define

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

Идентификаторы, которые заменяют числовые или текстовые константы либо произвольную последовательность символов, называются именованными константами.

Идентификаторы, которые представляют некоторую последовательность действий, заданную операторами или выражениями языка С, называются макроопределениями.

Макроопределения могут иметь аргументы.

Обращение к макроопределению в программе называется макровызовом.

#define идентификатор текст

Директива #define заменяет все вхождения идентификатора в исходном файле на текст, следующий за идентификатором. Этот процесс называется макроподстановкой.

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