Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по титп.doc
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
249.86 Кб
Скачать

Предпроцессор. Заголовочные файлы. Директивы предпроцессора

Получение использованного кода из исходного текста происходит в несколько этапов.

Первый этап связан с предпроцессором. Цель предпроцессора – закончить форматирование исходного текста программы на СИ++. Затем он подвергается компиляции.

Замечания:

  1. Директивы предпроцессора пишутся на отдельных(новых) строках.

  2. Большинство директив предпроцессора можно использовать в любом месте программы.

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

Список директив предпроцессора:

  1. #include - включает с исходный текст программы текстовый файл

< > включение файла происходит из стандартной библиотеки include

« » включение файла происходит из папки проекта, а затем из стандартной библиотеки

  1. #define

задаёт макроподстановки и определяет имена для компилятора

#define false=1

#define true=!false

  1. #undef

отменяет #define

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

#if

#elif

#endif

#ifdef

#ifndef

#define SQUARE(x)x*x

main()

{

int z=2;

int y=SQUARE(z+1); //9

}

Предопределение идентификатора

_ _CPLUSPLUS //исходный текст компилятора в формате СИ++

_ _DATE_ _ //преобразование в текущую дату

_ _LINE_ _ //номер строки

_ _FILE_ _//составляется строчка с названием файла и путём

_ _TIME_ _//дата и время последней компиляции

Cout<<”Error in” <<_ _FILE_ _<<”str=”<<_ _LINE_ _<<”curtime”<<_ _TIME_ _;

Указатели

«Указатель – это бумеранг. Если программист умеет им пользоваться, то получает эффективный код…»

Указатель – переменная, которая содержит адрес другого объекта СИ программы.

Если переменная содержит адрес некоторого другого объекта, то говорят, что переменная указывает на этот объект.

В иды указателей

На объект

На функцию

-указатели

-базовые типы

-на массивы

-на структуры

-struct, union, class

i nt *pa;

int * pa; одно и то же

int* pa;

Замечания:

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

  2. При таком объявлении выделяется память для переменной типа «указатель», но сам указатель никуда не указывает. Указатель лучше инициализировать во время объявления. Нельзя использовать указатели без инициализации.

int b;

int*pb=&b;

pa = &a;

  1. В зависимости от контекста объявления память под указатель компилятор может выделить стеки (локальная переменная), статические области данных, глобальных статических, динамических независимо от того, где находится сам объект.

int * p; //глобальная

{

int * p1; //локальная

static int* p2; //статическая

}

  1. При объявлении указателя на конкретный тип объекта С++ попытка использования этого указателя для ссылки на другой тип (без явного преобразования ) приведёт к ошибке при компиляции.

int a;

char *pa;

//pa=&a; //error!