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

Условная компиляция

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

#if LEVEL > 3

текст1

#elif LEVEL > 1

текст2

#else

текст3

#endif

Предполагается, что LEVEL – это макроимя, поэтому выражение в директивах #if и #elif можно вычислить во время обработки исходного текста препроцессором.

Итак, если LEVEL больше 3, то компилироваться будет текст1, если LEVEL больше 1, то компилироваться будет текст2, в противном случае компилируется текст3. Блок условной компиляции должен завершаться директивой #endif.

В каком-то смысле директива #if похожа на условный оператор if. Однако, в отличие от него, условие – это константа, которая вычисляется на стадии препроцессора, и куски текста, не удовлетворяющие условию, просто игнорируются.

Директив #elif может быть несколько (либо вообще ни одной), директива #else также может быть опущена.

Директива #ifdef – модификация условия компиляции. Условие считается выполненным, если указанное после нее макроимя определено. Соответственно, для директивы #ifndef условие выполнено, если имя не определено.

Дополнительные директивы препроцессора

Директива #pragma используется для выдачи дополнительных указаний компилятору. Например, не выдавать предупреждений при компиляции, или вставить дополнительную информацию для отладчика. Конкретные возможности директивы #pragma у разных компиляторов различные.

Обычно у большинства компиляторов реализована директива #pragma pack(N) определяющая как выравнивать данные в блоке (например 1- по границе байта и т.п.).

Директива #error выдает сообщение и завершает компиляцию. Например, конструкция

#ifndef unix

#error "Программу можно компилировать

только для Unix!"

#endif

выдаст сообщение и не даст откомпилировать исходный файл, если макроимя unix не определено.

Директива #line изменяет номер строки и имя файла, которые хранятся в предопределенных макроименах __LINE__ и __FILE__.

Кроме директив, у препроцессора есть одна операция ##, которая соединяет строки, например A ## B.

Включение файла. Директива #include

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

#include <имя_файла>

Пример:

#include <math.h>

Препроцессор заменяет эту строку содержимым файла math.h. Угловые скобки означают, что файл math.h будет взят из некоторого стандартного каталога. Текущий каталог не просматривается:

#include "имя_файла"

Пример:

#include "ABC"

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

    1. 3. Порядок выполнения работы

  1. Ознакомиться с теоретическими сведениями.

  2. Получить вариант задания у преподавателя.

  3. Выполнить задание.

  4. Продемонстрировать выполнение работы преподавателю.

  5. Оформить отчет.

  6. Защитить лабораторную работу.

    1. 4. Требования к оформлению отчета

Отчет по лабораторной работе должен содержать следующие разделы:

  • титульный лист;

  • цель работы:

  • задание на лабораторную работу;

  • ход работы;

  • ответы на контрольные вопросы;

  • выводы по проделанной работе.

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