Ни в С, ни в C++ нет ключевых слов, обеспечивающих ввод-вывод, обрабатывающих строки, выполняющих различные математические вычисления или какие-нибудь другие полезные процедуры. Все эти операции выполняются за счет использования набора библиотечных функций, поддерживаемых компилятором. Существует два основных вида библиотек: библиотека С-функций, которая поддерживается всеми компиляторами С и C++, и библиотека классов C++, которая, разумеется, годится только для языка C++. Подробнее об этих библиотеках речь пойдет ниже в настоящем справочнике.
Прежде чем ваша программа сможет использовать какую-нибудь библиотеку функций, она должна включить соответствующий заголовок. Вообще-то, под заголовками понимают заголовочные файлы, но на самом деле это необязательно должны быть именно файлы. Компилятор может внутренне предопределять содержимое заголовка. Однако для всех практических нужд стандартные С-заголовки содержатся в файлах, которые соответствуют их именам. Ниже перечислены стандартные заголовки, определенные стандартом С89 и поправкой 1995 года (Amendment 1).
| Заголовок |
Что поддерживает |
| <assert.h> |
Макрос assert() |
| <ctype.h> |
Обработка символов |
| <errno.h> |
Сообщения об ошибках |
| <float.h> |
Значения с плавающей точкой, зависящие от конкретной реализации компилятора |
| <iso646.h> |
Макросы, соответствующие различным операторам, например && и ^. Добавлено в 1995 году (Поправка 1) |
| <limits.h> |
Различные ограничения, зависящие от конкретной реализации компилятора |
| <locale.h> |
Функция setlocale() |
| <math.h> |
Различные определения, используемые библиотекой math |
| <setjmp.h> |
Нелокальные переходы |
| <signal.h> |
Значения сигналов |
| <stdarg.h> |
Списки аргументов переменной длины |
| <stddef.h> |
Распространенные константы |
|
Ввод-вывод файлов |
| <stdlib.h> |
Смешанные объявления |
| <string.h> |
Функции обработки строк |
| <time.h> |
Функции системного времени и даты |
| <wctype.h> |
Функции обработки многобайтовых слов и двухбайтовых символов. Добавлено в 1995 году (Поправка 1) |
| <wchar.h> |
Функции классификации многобайтовых слов и двухбайтовых символов. Добавлено в 1995 году (Поправка 1) |
В следующей таблице перечислены заголовки, добавленные стандартом С99.
| Заголовок |
Что поддерживает |
| <complex.h> |
Арифметика комплексных чисел |
| <fenv.h> |
Флажки (признаки) состояния и другие аспекты среды обработки чисел с плавающей точкой |
| <inttypes.h> |
Стандартный переносимый набор имен целочисленных типов; также функции, обрабатывающие целые числа самого широкого формата |
| <stdbool.h> |
Логические типы данных; также определяет макрос bool, способствующий достижению совместимости с языком C++ |
| <stdint.h> |
Стандартный переносимый набор имен целочисленных типов. Этот файл включен в заголовок <inttypes.h> |
| <tgmath.h> |
Стандартный переносимый набор имен целочисленных типов. Этот файл включен в заголовок <inttypes.h> |
В современной спецификации для языка C++ заголовки указываются с использованием стандартных имен заголовков, которые не имеют расширения .h (т.е. заголовки C++ не означают имена файлов). Это просто стандартные идентификаторы, которые компилятор может обрабатывать так, как считает нужным (т.е. заголовок может быть преобразован в имя файла, но это вовсе необязательно). С++-заголовки приведены ниже. Указанная в скобках аббревиатура STL означает прямую или косвенную связь данного заголовка со стандартной библиотекой шаблонов (Standard Template Library).
| Заголовок C++ |
Что поддерживает |
| <algorithm> |
Различные операции на контейнерах (STL) |
| <bitset> |
Битовые множества (STL) |
| <complex> |
Комплексные числа |
| <deque> |
Двухсторонние очереди (STL) |
| <exception> |
Обработка исключительных ситуаций |
| <fstrearn> |
Работа с файловыми потоками для чтения и записи в один и тот же файл |
| <functional> |
Различные объекты-функции (STL) |
| <iomanip> |
Манипуляторы ввода-вывода |
| <ios> |
Классы ввода-вывода нижнего уровня |
| <iosfwd> |
Упреждающие объявления для систем ввода-вывода |
| <iostream> |
Стандартные классы ввода-вывода |
| <istream> |
Обработка входных потоков |
| <iterator> |
Доступ к содержимому контейнеров (STL) |
| <limits> |
Различные ограничения реализации |
| <list> |
Линейные списки (STL) |
| <locale> |
Информация, связанная с традициями конкретных стран или географических регионов |
| <map> |
Отображения (ключи и значения) (STL) |
| <memory> |
Распределение памяти с помощью распределителей памяти (STL) |
| <new> |
Выделение памяти с помощью оператора new |
| <numeriс> |
Универсальные операции над числами |
| <ostream> |
Обработка выходных потоков |
| <queue> |
Очереди (STL) |
| <set> |
Множества (STL) |
| <sstream> |
Обработка строковых потоков |
| <stack> |
Стеки(SLT) |
| <stdexcept> |
Стандартные исключительные ситуации |
| <streambuf> |
Буферизированная обработка потоков |
| <string> |
Стандартный класс string (STL) |
| <typeinfo> |
Динамическая информация о типе |
| <utility> |
Шаблоны общего назначения (STL) |
| <valarray> |
Операции над массивами, содержащими значения |
| <vector> |
Векторы (динамические массивы) (STL) |
В языке C++ также определены следующие заголовки, которые соответствуют С-заголовкам.
| <cassert> |
<cctype> |
<cerrno> |
| <cfloat> |
<ciso646> |
<climits> |
| <clocale> |
<cmath> |
<csetjmp> |
| <csignal> |
<cstdarg> |
<cstddef> |
| <cstdio> |
<cstdlib> |
<cstring> |
| <ctime> |
<cwchar> |
<cwctype> |
В стандартном языке C++ вся информация, связанная со стандартной библиотекой, определена в пространстве имен std. Следовательно, для получения прямого доступа к этим элементам после включения нужного заголовка вам придется использовать следующий оператор using.
using namespace std;
В качестве альтернативного варианта, чтобы не вносить целую библиотеку в глобальное пространство имен, каждый библиотечный идентификатор можно квалифицировать с помощью обозначения std::, например std::cout. Однако в этом случае квалификация каждого имени будет выглядеть весьма громоздко.
Совет программисту
Если вы используете более старый компилятор C++, то может оказаться, что он не поддерживает С++-заголовки нового стиля или команду namespace. В этом случае вам придется использовать заголовки более старого традиционного стиля. Это значит, что к тем же самым именам заголовков нужно добавить расширение .h, после чего они будут напоминать С-заголовки. Например, так выглядит включение заголовка <iostream> при использовании традиционного подхода.
#include <iostream.h>
При использовании заголовка в традиционном стиле все имена, определенные этим заголовком, размещаются в глобальном пространстве имен, а не в пространстве имен std. Следовательно, в этом случае оператор using не требуется