Стандартные библиотеки С и C++

Ни в С, ни в 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> Распространенные константы
<stdiо.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 не требуется



Проекты жилых частных домов
Галерея проектов. База данных архитектурных проектов
proektydomow.ru