Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Директива #include

Препроцессор

Препроцессор – текстовый процессор, который манипулирует текстом исходных файлов на первой фазе трансляции. Препроцессор позволяет: определять макросы, производить макроподстановку, производить условную компиляцию, включать указанные файлы, применять машинно-зависимые правила к определенным частям исходного кода.

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

Директива макроопределения

#define идентиф замещающий_текст

#define идентиф(идентиф, идентиф, …, идентиф) замещающий_текст

используется для простейшей замены: во всех местах, где встречается лексема идентиф, вместо нее будет помещен замещающий_текст (от места макроопределения и до конца файла). Пример:

#define IDI_ICON1 101

#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

#define CASE break; case

#define FOREVER for(;;)

Макросы имеют большое значение в C, но в C++ они используются значительно реже. Вместо макроподстановки, определяющей константу, рекомендуется определять константу с помощью ключевого слова const, а вместо макроподстановки функционального вида – inline -функции.

 

#include " path-spec "

#include < path-spec >

Директивы включения могут быть вложенными (до 10 уровней).

 

#undef идентиф

#pragma токен-стринг #pragma vtordisp(off)

 

 

Область видимости (scope)

Каждое имя (не только имя переменной) в C++ может использоваться только в определенной области программы. Эта область называется областью видимости имени.

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

1. Локальная область видимости. Имя, объявленное внутри блока, доступно только в этом блоке и в содержащихся в нем блоках, и только после точки объявления. Замещение имен.

2. Область видимости функции. Такую о.в. имеют только метки для оператора goto. Метки могут использоваться в любом месте функции, но не за ее пределами.

3. Область видимости файла. Любое имя, объявленное вне какого бы то ни было блока или класса, имеет о.в. файла. Имя доступно после точки объявления до конца файла. Доступ через унарный оператор::i

4. Область видимости класса. Имена членов класса имеют о.в. класса. Доступ через объект (. ->) и через бинарный оператор classname::i.

5. Область видимости прототипа. Эту о.в. имеют имена, объявленные в прототипе функции.

 

Связывание (linkage)

Программа состоит из нескольких единиц трансляции, связываемых вместе. Способ, которым имена объектов и функций совместно используются в различных ед. трансляции, называется связыванием. Существует 3 типа связывания: внутреннее (static int a;), внешнее (int a; extern int a;) и отсутствие связывания (typedef, enum).

 

Виды переменных по типу выделяемой памяти (способы использования памяти)

1. Статическая память, в которую компоновщик помещает объект на все время выполнения программы. В статической памяти располагаются глобальные переменные и переменные из пространств имен, статические члены классов и статические переменные из функций. Объект, размещаемый в статической памяти, конструируется один раз и сохраняется до окончания программы. Он всегда имеет один и тот же адрес. В многопотоковом (multithreaded) коде имеют одно состояние для всех потоков.

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

3. Свободная (динамическая) память, которую явно требует программа при размещении объектов, и которую она может освободить после того, как память больше не нужна (при помощи new и delete).

Класс памяти (storage class)

Класс памяти управляет продолжительностью жизни и связыванием объектов (переменных) в C++. (auto, register, static и extern)

 

объекты где существуют Время жизни
создаются уничтожаются
статические в коде глобальные – на этапе компиляции локальные статические – на этапе выполнения в точке определения после завершения программы
автоматические в стеке на этапе выполнения в точке определения при выходе из блока
динамические в свободной памяти на этапе выполнения при вызове оператора new при вызове оператора delete

 

 

<== предыдущая лекция | следующая лекция ==>
Фазы трансляции | Структуры. Унарные операторы new и delete служат для управления свободной памятью
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 406; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.