Лекция №10
Тема: ДИРЕКТИВЫ
ПРЕПРОЦЕССОРА
Содержание:
Директивы препроцессора
упрощают исходные программы при модификации, компиляции в различных реализациях
СИ. Они могут появляться в любом месте файла, но применимы только к его
остатку.
Директива
#define
Директива #define
cвязывает мнемонические идентификаторы с константами, ключевыми словами,
выражениями, которые часто используются.
Идентификаторы, связывающиеся с константами, называются поименованными
константами. Идентификаторы, которые связываются с операторами или выражениями,
называются макросами.
Директива
#define идентификатор текст
заменяет в программе
идентификатор на текст.
Директива
#define
идентификатор(список параметров) текст
меняет в программе
идентификатор со списком параметров на текст с фактическими параметрами.
Эта директива сходна с описанием функции, но ее применение эффективнее
по времени выполнения. В макросе каждую операцию следует заключать в круглые
скобки, чтобы избежать недоразумений при его подстановке. Числа фактических
и формальных параметров должны совпадать.
Директива
#define идентификатор
убирает идентификатор
из текста.
#define WIDTH
80
#define LENGTH (WIDTH+10)
#define MES "Нельзя открыть файл \ // \ - переход на новую строку
т. к. он не существует"
рrintf( "Ошибка 1 : MES \n ");
#define REG1
register
#define MAX(a,b) ((a)>(b))?(x):(y) // макроопределение
с = MAX( i , s[i] ); // макровызов
Переопределить
идентификатор можно также через #define.
Директива
#undef
Директива
#undef идентификатор
отменяет текущее
определение идентификатора. Для отмены определения макроса параметры не
указываются:
#undef REG1
,
#undef MAX
Директива
#include
Директива #include
добавляет содержимое файла под именем рathname в данный файл:
#include "рathname"
#include <рathname>
При использовании
кавычек поиск файла проходит сначала в текущей директории, потом - в директории
include. Угловые скобки означают, что поиск файла проводится
только в директории include.
Директива
#if (#endif)
Директива #if определяет, какая часть исходного файла пропускается
при компиляции:
#if условное
выражение или идентификатор [текст]
#endif
В конце обязательно
должна быть закрывающая директива #endif.
Директива
#else, #elif (defined)
Между этими директивами могут быть: одна #else непосредственно
перед #endif; несколько #elif.
#if defined(CREDIT)
credit( );
#elif defined(DEBIT)
debit( );
#else рr_err( );
#endif
Результат defined
истинен, если идентификатор, стоящий за ним в скобках, определен.
Директива
#ifdef, #ifndef
Директива
#ifdef идентификатор
проверяет истинность определения идентификатора. Если идентификатор определен
к данному моменту, то результат истинен (N!=0), в противном случае ложен
(=0).
Директива
#ifndef идентификатор
противоположна
директиве #ifdef.
Контрольные
вопросы
1.
Для чего используются директивы препроцессора?
2. Что такое макроопределение?
3. Как записывается директива условной компиляции?
4. Как работает директива #undef?
5. Какой директивой подключаются при компиляции файлы?
|