Саммерфилд Марк
Шрифт:
• Ради удобства препроцессор воспринимает #ifdef X и #ifndef X как синонимы #if defined(X) и #if !defined(X). Для пpeдoтвpaщeния мнoгoкpaтныx включeний заголовочного файла мы окружаем его содержимое следующими директивами:
При первом включении заголовочного файла символ MYHEADERFILE_H оказывается неопределенным, поэтому компилятор обрабатывает программный код, заключенный между директивами #ifndef и #endif. При повторном и последующих включениях заголовочного файла символ MYHEADERFILE_H оказывается определенным, поэтому весь блок #ifndef … #endif пропускается.
• Директива #errоr генерирует на этапе компиляции определенное пользователем сообщение об ошибке. Эта директива часто используется в комбинации с директивами условной компиляции для вывода сообщения о возникновении недопустимого условия. Например:
В отличие от большинства других конструкций С++, в которых недопустимы пробельные символы, препроцессорные директивы должны быть единственными в строке и не должны содержать точку с запятой. Слишком длинные директивы можно разбивать на несколько строк, заканчивая каждую строку, кроме последней, обратной наклонной чертой.
Стандартная библиотека С++
В данном разделе мы кратко рассмотрим стандартную библиотеку С++. На рис. Б.З приводится список базовых заголовочных файлов С++:
• <bitset> — шаблонный класс для представления последовательностей битов фиксированной длины,
• <complex> — шаблонный класс для представления комплексных чисел,
• <exception> — типы и функции, относящиеся к обработке исключений,
• <limits> — шаблонный класс, определяющий свойства числовых типов,
• <locale> — классы и функции, относящиеся к локализации,
• <new> — функции, управляющие динамическим распределением памяти,
• <stdexcept> — заранее определенные типы исключений для вывода сообщений об ошибках,
• <string> — шаблонный строковый контейнер и свойства символов,
• <typeinfo> — класс, предоставляющий основную метаинформацию о типах,
• <valarray> — шаблонные классы для представления массивов значений.
Заголовочные файлы <exception>, <limits>, <new> и <typeinfo> поддерживают возможности языка С++; например, <limits> позволяет проверять возможности поддержки компилятором целочисленной арифметики и арифметики чисел с плавающей точкой, a <typeinfo> предлагает основные средства анализа информации о типах. Другие заголовочные файлы предоставляют часто используемые классы, в том числе класс строки и тип комплексных чисел. Функциональность, предлагаемая заголовочными файлами <bitset>, <locale>, <string> и <typeinfo>, свободно перекрывается в Qt классами QBitArray, QLocale, QString и QMetaObject.
Стандартный С++ также включает ряд заголовочных файлов, обеспечивающих ввод—вывод (см. рис. Б.4):
• <fstream> — шаблонные классы, манипулирующие внешними файлами,
• <iomanip> — манипуляторы потоков ввода—вывода, принимающие один аргумент,
• <ios> — шаблонный базовый класс потоков ввода—вывода,
• <iosfwd> — предварительные объявления нескольких шаблонных классов потоков ввода—вывода,
• <iostream> — стандартные потоки ввода—вывода (cin, cout, cerr, ctog),
• <istream> — шаблонный класс, управляющий вводом из буфера потока,
• <ostream> — шаблонный класс, управляющий выводом в буфер потока,
• <sstream> — шаблонные классы, связывающие буферы потоков со строками,
• <streambuf> — шаблонные классы, обеспечивающие буфер для операций ввода—вывода,