Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(это программирование 2й семестр).docx
Скачиваний:
39
Добавлен:
15.05.2015
Размер:
45.99 Кб
Скачать
  1. Спецификаторы класса памяти.

    1. В С++ имеются 4 спецификации класса памяти

auto

register

extern

static

    1. Спецификации auto и register используют

ся для объявлений переменных с локальным временем жизни

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

и исчезают при выходе из блока

Спецификация auto устанавливается по умолчанию

auto float p;

    1. Спецификация register дает указания компилятору сохранять переменную в высокоскоростном регистре, если ее предполагается использовать часто. Это совет компилятору, не всегда выполним

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

и уничтожаются при выходе из него

    1. Extern используется для обьявления переменной с глобальным временем жизни.

Память для них выделяется в момент обьявления в программе и сохраняется до ее окончания.

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

На них может ссылаться любая функция, обьявленная после их обьявления.

Устанавливается extern по умолчанию.

Внутри блока предпочтение отдается местной локальной переменной.

То же правило предпочтения работает во вложенных блоках, предпочтение отдается

локальной переменной внутреннего блока.

    1. Static

Локальные переменные с этим атрибутом доступны только в том блоке, где они обьявлены, но

живут они в памяти компьютера до конца исполнения программы.

  1. Операция :: .

    1. В С++ имеется операция :: , которая позволяет внутри блока или внутри функции осуществлять доступ к глобальной

переменной, при наличии у нее локальной тезки.

int i=::i;

Позволяет локальной переменной i присвоить значение глобальной переменной i.

Примеры:

#include<iostream>

using namespace std;

int var=111; //Глобальная переменная

void f1(void)

{

int var=222; //Локальная переменная функции f1

cout<<"Значение var в f1() = "<<var<<endl; //222, т.к ЛП скрывает глобальную

cout<<"Значение var в f1() = " <<::var<<endl; //111, т.к ГП становится видимой

}

void f2(void)

{

static int count; //ЛСП сохраняет значение между вызовами и инициализируется один раз нулем

cout<<"Значение count в f2 = "<<count++<<endl;

cout<<var<<endl;

var *=3; //

}

main()

{

cout<<"Значение var = "<<var<<endl;

f1();

cout<<"После вызова f1() var = "<<var<<endl;

f2();

cout<<"После вызова f2() var = "<<var<<endl;

return 0;

}

  1. Функции препроцессора. Основные директивы препроцессора

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

      1. 1) включить компилируемый файл

      2. 2) определить символьные const, макросы

      3. 3) задать режим условной компиляции

    2. Наиболее употребляемые директивы:

      1. include

      2. define

      3. undef

      4. ifdef (ifndef)

  2. Директива include. Ее назначение. Правила использования.

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

- include <имя файла>

- include “имя_файла”

Различие заключается в методе поиска препроцессором включаемого файла. Если имя файл заключено в < > (iostream), то последовательность поиска препроцессором файла в каталогах определяется используемой системой программирования. Если имя файла в “ “, то препроцессор ищет сначала в том каталоге, где находиться компилируемый файл, а затем продолжает поиск тем же способом, что и при < > скобках в списках каталогов системы программирования.