polevoi_cpp_2013_spring_lecture_05
.pdf
Условная компиляция (пример)
пример:
#if (_MSC_VER < 1500)
//...
#else
//...
#endif
30.03.2013 |
11 |
Стандартные макросы
__FILE__
__LINE__
__DATE__
__TIME__
__cplusplus
30.03.2013 |
12 |
Использование библиотеки
•включить заголовок
•использовать
–объявления
–переменные
–функции
•скомпоновать библиотеку
30.03.2013 |
13 |
Реализация модульности в С++
•функция – единица логики исполнения
•модуль (.cpp) – единица организации исходного кода
•общие объявления выносятся в заголовок
30.03.2013 |
14 |
Заголовочные файлы
• стандартные
#include <стандартная_библиотека>
• пользовательские
#include “включаемая_компонента”
30.03.2013 |
15 |
Порядок поиска
•определяется реализацией
•может быть причиной “сложных” ошибок
•переменные окружения
•опции компилятора
•текущая папка
30.03.2013 |
16 |
Правило единственного определения (ODR)
•в пределах единицы трансляции тип данных, функция или объект не могут иметь более одного определения
•в пределах программы (совокупности всех единиц трансляции) объект или не-inline функция не могут иметь больше одного определения
30.03.2013 |
17 |
Проблема повторного включения
// in file b.h #include “a.h”
// in file b.h |
// in file c.h |
#include “a.h” |
#include “a.h” |
// in file d.h #include “b.h” #include “c.h”
30.03.2013 |
18 |
Стражи включения
•предотвращение повторного определения
пример:
// In file defs.h #ifndef DEFS_H_20080910 #define DEFS_H_20080910
.
.
.
#endif // DEFS_H_20080910
30.03.2013 |
19 |
.h может содержать
•директивы включения, макроопределения и директивы условной компиляции
•именованные пространства имен
•объявления имен типов, функций и данных
•определения типов
•определения встроенных функций объявления и определения шаблонов
•определения констант
•перечисления
30.03.2013 |
20 |
