Лекция 1

Правила оформления программ на Си/Си++.
Операции и основные типы данных.

Лекция 2

Операторы


Лекция 3

Использование библиотечных процедур СИ

 

Лекция 10

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

Лекция 11

Видимость и время жизни переменных

Лекция 12

Дополнительные возможности Си++


Лекция 13

Объектно-ориентированное программирование
 

 

 

 

главная

Лекция

Лекция №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. Какой директивой подключаются при компиляции файлы?

 

 

 

Hosted by uCoz