Библиотеки си: Библиотеки. Урок 22 курса «Основы языка C»
Стандартная библиотека языка Си
Пожалуйста, приостановите работу AdBlock на этом сайте.
В прошлых уроках мы изучили много различных стандартных функций. Большинство из них становились доступны, когда мы подключали в программу определенный заголовочные файлы, наприимер stdio.h, math.h или string.h. Они входят в состав стандартной библиотеки языка Си. Кроме них есть другие заголовочные файлы, которые включены в стандартную библиотеку языка Си, например, из используемых нами ранее stdlib.h и time.h.
Стандартная библиотека языка Си – это набор отдельных файлов, которые расширяют возможности языка Си. Например, как мы уже отмечали ранее, добавление к нашей программе файла math.h позволяет использовать различные математические функции. Добавление stdio.h позволяет взаимодействовать программе с внешним миром (читать/выводить данные).
Схематично можно представить себе язык программирования Си как набор отдельных законченных модулей. Условно эта структура изображена на следующем рисунке.
Рис.1 Архитектура языка Си.
По факту язык Си самостоятельно, без функций стандартной библиотеки, почти ничего не может. Даже вывести значение переменной на экран. Но благодаря дополнительным модулям (стандартным заголовочным файлам) возможности языка могут быть существенно расширены. А если какие-то возможности не нужны, то они не будут включены в итоговую версию программы.
Модульный подход получил широкое распространение в программировании.
Основные плюсы:
- модули между собой независимы и каждый из них может разрабатываться/меняться отдельно от других модулей и всей программы в целом;
- возможность самостоятельно подключать необходимые модули;
- возможность расширения функционала за счёт добавления/написания нового модуля.
Модули могут быть реализованы, например, в виде отдельных заголовочных файлов или отдельных файлов с кодом.
Каждый модуль должен решать какие-то свои задачи. Модуль можно представить себе как «чёрный ящик». У него есть две основных части: интерфейс взаимодействия с модулем (сколько и каких данных поступает в чёрный ящик и какие данные им возвращаются) и внутренняя реализация модуля (содержимое чёрного ящика).
Если рассматривать отедельную функцию языка Си как модуль, то интерфейсом является заголовок или прототип функции. Он полностью описывает, что необходимо функции для работы: какого типа данные нужны, в каком порядке их надо передавать, в каком количестве и т.д., а также какие данные функция возвращает. Тело функции при этом является реализацией модуля.
Кстати, что касается стандартной библиотеки языка Си. Если вы ещё не пробовали искать у себя на компьютере заголовочные файлы, то попробуйте. Внутри них только прототипы функций, а самой реализации нет. Т.е. по факту в заголовочных файлах содержится только интерфейс модуля или по-другому API(Application Programming Interface, чит. эй-пи-ай, иногда по-русски произносят апи), а сами реализации от программиста скрыты и находятся уже в отдельных, скомпилированных библиотечных файлах.
Использование API – тоже широко распространённая практика. Многие сервисы предоставляют свой открытый API. Например, платформа Stepic, которую я использую для автоматической проверки задач, или сайт Вконтакте. Т.е. по сути данные сайты выкладывают в открытый доступ (vk, Stepic) описание различных функций, которые я могу использовать в своих программах. Именно на использовании API строится разработка различных сервисов и приложений для работы с различными платформами.
13 библиотек С++, о которых нужно знать
Помимо стандартной библиотеки, содержащей основные модули языка С++, разработаны десятки, а то и сотни дополнительных библиотек. Каждая из этих библиотек содержит программы и подпрограммы, производящие ряд действий.
Использование сторонних библиотек сокращает объём кода и оптимизирует работу программы, поскольку решения, использован ные разработчиками библиотеки и оттестированные сотнями программистов в разноплановых проектах, после нескольких лет шлифовки достигают лучших показателей по всем параметрам.
Знание и использование ряда полезных библиотек сильно упрощает работу программиста. По этому признаку работодатели легко отличают уверенного профессионала от неопытного новичка.
В этой статье Вы сможете познакомиться с рядом полезных библиотек, которые активно используются разработчиками по всему миру.
Веб-разработка
V8
Если Вам нужен удобный инструмент для работы с JavaScript, V8 подойдёт идеально.
Свои функции V8 реализует, используя специальные классы, написанные на с++ и объявленные в namespace V8. Работать с джава скрипт — структурами можно через привычную оболочку с++.
Схема взаимодействия объектов с++ и V8 реализована посредством использования v8::Handle (template-классов).
Установка V8 обычно не занимает много времени, а польза для тех, кому периодически приходится работать с JavaScript’ом, неоценима.
Кроме того, о библиотеках, с помощью которых могут взаимодействовать C++ и JavaScript очень любят спрашивать на собеседованиях. Поэтому даже, если вы не собираетесь работать с js , с V8 или другими подобными библиотеками лучше познакомиться.
WebKit
Так или иначе, почти все разработчики на разных этапах сталкиваются с необходимостью отображать web – элементы. Чтобы всё выглядело красиво и в коде, и в конечном отображении, а выполнение этой задачи не отнимало слишком много времени и сил, существует библиотека WebKit.
Некоторые программисты называют WebKit «чёрным ящиком», органично перерабатывающим html, css и JavaScript в полноценные веб-страницы.
Awesomium
Awesomium — это библиотека для интеграции браузера (на базе Chromium) в своё приложение. Библиотека имеет 2 режима работы: Offscreen и Windowed.
В режиме Offscreen отрисовка и работа скриптов на экране не отображается.
В режиме Windowed средствами библиотеки эффективно выполняется отрисовка в «окне приписки» и обработка активности мыши и клавиатуры.
Awesomium активно применяется в десятках разных приложений. Описаны случаи интеграции этой библиотеки в 3D игры.
Существенный минус – отсутствие активного сообщества, способного познакомить новичка с библиотекой, ответить на вопросы и исправить ошибки. А документация, доступная для работы с Awesomium на с++, даёт довольно смутное представление о принципах работы библиотеки.
Тем не менее, Awesomium остаётся очень удобным инструментом, завоевавшим признание сотен разработчиков по всему миру.
Работа с сервером
Libcurl
Хотите упростить взаимодействие с сервером? – используйте Libcurl.
Libcurl помогает передавать данные (изображения, файлы и пр.) приложениям. Libcurl поддерживает 13 основных протоколов FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP.
Изначально cUrl предназначался для использования на языке С. Сейчас для работы с Libcurl разработаны модули интеграции к 30 языкам программирования. Что говорит о высокой популярности библиотеки в среде разработчиков. На это же указывает высокий рейтинг продукта.
Сжатие данных
Библиотек для сжатия данных довольно много, одна из самых удобных и популярных
Zlib
Сжатие любых объёмов данных (даже превышающих объём памяти) с помощью zlib проводится предельно легко.
Zlib написана на языке С и применяется в тысячах проектов. Использование некоторых других библиотек невозможно без использования zlib. Примером такой библиотеки является основная библиотека для работы с растровой графикой в формате .png — libpng.
Работа с изображениями
Libpng и libjpg
Libpng, написанная на C с использованием ассемблера, предназначена для работы с изображениями в формате .png.
Для работы с изображениями в формате .jpg существует библиотека libjpg (также написанная на С с использованием Ассемблера)
Обе библиотеки имеют подробные инструкции и множество примеров использования как в С, так и в С++.
Работа с PDF
Периодически возникает необходимость конвертировать файлы в формат pdf. Для этого процесса разработана динамическая библиотека DynaPDF.
DynaPDF
DynaPDF – удобный гибкий инструмент. Формат .dll хотя и открывает достаточно широкие возможности, периодически становится причиной возникновения ошибок.
Для успешного устранения ошибок в сети есть много пошаговых инструкций.
Используется для программирования на языках C/C++, C#, Delphi, Lazarus, PHP, VB, VBA, and VB .Net.
Работа с базами данных
Большая часть приложений нуждается во взаимодействии с базами данных. Оттуда получаются и туда передаются потоки необходимой информации. Поэтому большинство работодателей интересует умение соискателей работать с базами данных.
Libpq
Libpq – удобная библиотека для взаимодействия С и PosgreSQL. Благодаря ей из кода С можно вносить изменения в базу данных, добавлять и безвозвратно удалять данные, создавать и удалять таблицы.
Существуют вариации libpq для C++, Python’a, Perl’a, Tcl, ECPG.
Отладка и тестирование
Ещё один важный пласт знаний для программиста – отладка и тестирование кода. Знание специфических библиотек, существенно упростит Вам решение этой задачи, а коллегам наглядно продемонстрирует уровень вашего профессионализма.
Check
Библиотека Check предназначена для модульного тестирования всех возможностей программ, написанных на языке С. Существенным плюсом использования Check’а служит возможность запуска тестов в отдельных процессах для более точной диагностики причин возникновения ошибок, снижения скорости и т.п
Для модульного тестирования на языке С++ используется Google C++ Testing Framework (Google Test).
Pcap
С помощью этой библиотеки создаются программы, отслеживающие трафик, поступающий на сетевую карту компьютера. Это может быть очень полезно для отладки программ, составления мониторинговых отчётов и т.п.
Pcap предназначена для работы с С и С++. Существуют обёртки, делающие эту библиотеку доступной для работы на других языках программирования.
Ещё Вам может пригодиться…
Libusb
Libusb — это библиотека, которая позволяет обмениваться данными с USB-устройствами прямо из кода программы.
В библиотеке поддерживаются все типы передачи (управление / объем / прерывание / изохронность). Важный элемент библиотеки – журнал сообщений. Он помогает правильно расшифровать коды ошибок, поступающие от USB- устройств.
Предназначена для работы с С. Для других языков программирования разработаны обёртки. Для С++ — Libusbpp
ZBar
Библиотека ZBar предназначена для распознавания штрихкодов из изображений.
ZBar имеет предельно простую и логичную документацию без «тёмной магии» и необъяснимых функций.
Работать с ней легко и удобно. Можно использовать из программных интерфейсов С, С++, Питона и других языков программирования.
Заключение
Большинство описанных библиотек работают и под Windows, и под Linux, и под macOS, и под BSD. Разработчики библиотек предоставляют подробную техническую документацию, а комьюнити готово поделиться пошаговыми инструкциями по установке и ответить на любые рабочие вопросы.
Умение работать с библиотеками – важный навык для любого программиста. Это своеобразный показатель его профессионального уровня и понимания процесса разработки.
Библиотеки помогают решить множество сложных задач, возникающих при разработке кода. Чем теснее Вы с ними «подружитесь», тем шире будет круг ваших профессиональных возможностей.
Не бойтесь новых задач – ищите их решение.
Пишите код, тестируйте и оттачивайте его до блеска. А команда progtips.ru всегда придёт Вам на помощь!
АНОНС
Вы думаете, это все полезные библиотеки? Нет! На десерт мы оставили самое интересное.
В следующем выпуске Вас ждут:
— лучшие графические библиотеки для С++;
— чем пользуются разработчики компьютерных игр в России и на Западе;
и как по графической библиотеке отличить любителя от профессионала.
Стандартная библиотека языка Си — это… Что такое Стандартная библиотека языка Си?
Стандартной библиотекой языка Си (также известная как libc, crt) называется часть стандарта ANSI C, посвященная заголовочным файлам и библиотечным подпрограммам. Является описанием реализации общих операций, таких как обработка ввода/вывода и строк, в языке программирования Си. Стандартная библиотека языка Си — это описание программного интерфейса, а не настоящая библиотека, пригодная для использования в процессе компиляции.
Структура
Имя и характеристики каждой функции указываются в файле, именуемым заголовочным файлом, но текущая реализация функций описана отдельно в библиотечном файле. Наименование и возможности заголовочных файлов становятся общими, но организация библиотек по-прежнему остается разнотипной. Стандартная библиотека обычно поставляется вместе с компилятором. Так как компиляторы языка Си часто обеспечивают расширенную функциональность, не определенную стандартом ANSI C, стандартная библиотека одного компилятора несовместима со стандартными библиотеками других компиляторов.
Мнения о структуре
Большая часть стандартной библиотеки языка Си производит впечатление удачно спроектированной. Некоторые отдельные части, дававшие преимущество в прошлом, могут провоцировать ошибки. Функции строкового ввода gets()
(и применение scanf()
для считывания вводимых строк) являются источником множества переполнений буфера, поэтому большинство руководств по программированию советуют избегать подобных приемов. Функция strcpy()
также весьма печально знаменита. Ещё одной неоднозначной функцией является strtok()
— функция, разработанная как простейший лексический анализатор, но имеющая множество «подводных камней» и потому весьма трудная в использовании.
Выбор применения типа size_t
вместо int
для числа элементов, указанных для fread()
и fwrite()
является несовместимым с разработанной общей семантикой для size_t
(для представления количества байтов).[источник не указан 506 дней]
stdio
достаточно ограничен (слишком высокий уровень для использования во многих ситуациях) и стандарт не позволяет пользователю самостоятельно переназначать или расширять его свойства. В итоге, для множества приложений разрабатываются собственные библиотеки-обертки вокруг механизмов более низкого уровня и функций, реализуемых ОС, таких как POSIX. Например, stdio
не работают с сигналами или асинхронными непакетными режимами ввода-вывода, которые широко используются в сетевых серверах. В итоге, только серверы, использующие модель целого процесса для клиента, могут полностью полагаться на функции stdio
для обслуживания их на POSIX-совместимых системах в пакетном режиме ввода-вывода.
Определенных функций стандартной библиотеки нужно избегать при разработке многопоточных приложений. Примитивы контроля потоков предназначались для оставшейся части ОС и игнорируют общие стандарты, как например, библиотеку потоков POSIX, ожидая, что программисты языка Си, самостоятельно об этом позаботятся работая с повторным использованием и синхронизацией. Ни язык Си, ни его стандартная библиотека никак не проверяют подобные системноспецифичные результаты.
История
Язык программирования Си до стандартизации не обеспечивал встроенной функциональности, как, например, операции ввода-вывода (в отличие от таких традиционных языков, как Кобол и Фортран). Позже, в сообществе программистов, работавших с языком Си, зародились идеи, которые реализовались в то, что мы сейчас называем Стандартной библиотекой языка Си, для поддержки этой функциональности. Большинство этих идей в итоге объединились в определении стандарта языка программирования Си.
И Unix, и Си были созданы в AT&T’s Bell Laboratories в конце 1960-х — начале 1970-х. В 1970-е язык программирования Си начал пользоваться невероятной популярностью. Множество университетов и организаций начали создание собственных вариантов языка, более подходящих для собственных нужд. С началом 1980-х проблемы совместимости между различными реализациями языка Си стали слишком очевидными. В 1983 году Американский национальный институт стандартов (ANSI) сформировал комитет для принятия стандарта языка Си, известный как «ANSI Си». Эта работа вылилась в создание так называемого стандарта C89 в 1989. Часть итогового стандарта была набором библиотек, названная Стандартная библиотека ANSI Си.
Последующие версии стандарта языка Си добавляли некоторые новые и наиболее полезные заголовочные файлы в библиотеку. Поддержка этих новых расширений зависела от реализации.
Заголовочные файлы <iso646.h>, <wchar.h> и <wctype.h> были добавлены в Приложении 1 (сокращенно NA1) — дополнении к Стандарту языка Си, ратифицированному в 1995.
Заголовочные файлы <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> и <tgmath.h> были добавлены в C99, версии Стандарта языка Си, опубликованном в 1999.
Стандарт ANSI
Стандартная библиотека ANSI Си состоит из 24 заголовочных файлов, каждый из которых можно подключать к программному проекту при помощи одной директивы. Каждый заголовочный файл содержит объявления одной или более функций, определения типов данных и макросы. Содержание этих заголовочных файлов перечисляется ниже.
В сравнении с некоторыми другими языками (например Java) стандартная библиотека крайне мала. Библиотека обеспечивает поддержку основного набора математических функций, обработку строк, конвертацию типов, файловый и консольный ввод-вывод. Она не содержит стандартный набор «контейнерных типов» как стандартная библиотека шаблонов языка C++, компоненты для работы с графическим пользовательским интерфейсом (GUI), сетью и прочей разнообразной функциональности, которую Java поддерживает по стандарту. Главным преимуществом маленькой стандартной библиотеки является упрощение работы с окружением ANSI Си по сравнению с другими языками, а следовательно и упрощение портирования программ на языке Си на новые платформы.
Множество прочих библиотек было разработано для поддержки схожей функциональности, обеспечиваемой другими языками в их стандартных библиотеках. Например, в проекте разработки окружения рабочего стола GNOME был разработан набор графических инструментов GTK+ и GLib — библиотека контейнерных структур данных, как впрочем и множество других известных примеров. Разнообразие доступных библиотек означает, что некоторые инструменты верхнего уровня, со временем подтвердили свою полезность. Значительным минусом является то, что они часто не слишком успешно взаимодействуют друг с другом, поэтому программистам зачастую привычнее работать с различными наборами библиотек, а их наборы могут быть доступны на различных специфических платформах.
Библиотечные заголовочные файлы ANSI Си
<assert.h> | Содержит макрос утверждений, используемый для обнаружения логических и некоторых других типов ошибок в отлаживаемой версии программы. |
<complex.h> | Набор функций для работы с комплексными числами. (Появилось в C99) |
<ctype.h> | Содержит функции, используемые для классификации символов по их типам или для конвертации между верхним и нижним регистрами независимо от используемой кодировки (обычно ASCII или одно из её расширений, хотя есть и реализации, использующие EBCDIC). |
<errno.h> | Для проверки кодов ошибок, возвращаемых библиотечными функциями. |
<fenv.h> | Для управления средой, использующей числа с плавающей запятой. (Появилось в C99) |
<float.h> | Содержит заранее определенные константы, описывающие специфику реализации свойств библиотеки для работы с числами с плавающей запятой, как, например, минимальная разница между двумя различными числами с плавающей точкой (_EPSILON), максимальное число цифр точности (_DIG) и область допустимых чисел (_MIN, _MAX). |
<inttypes.h> | Для точной конвертации целых типов. (Появилось в C99) |
<iso646.h> | Для программирования в кодировке ISO 646. (Появилось в NA1) |
<limits.h> | Содержит заранее заданные константы, определяющие специфику реализации свойств целых типов, как, например, область допустимых значений (_MIN, _MAX). |
<locale.h> | Для setlocale() и связанных констант. Используется для выбора соответствующего языка. |
<math.h> | Для вычисления основных математических функций |
<setjmp.h> | Объявляет макросы setjmp и longjmp, используемые для нелокальных переходов |
<signal.h> | Для управления обработкой сигналов |
<stdarg.h> | Для доступа к различному числу аргументов, переданных функциям. |
<stdbool.h> | Для булевых типов данных. (Появилось в C99) |
<stdint.h> | Для определения различных типов целых чисел. (Появилось в C99) |
<stddef.h> | Для определения нескольких стандартных типов и макросов. |
<stdio.h> | Реализует основные возможности ввода и вывода в языке Си. Этот файл содержит весьма важную функцию printf . |
<stdlib.h> | Для выполнения множества операций, включая конвертацию, генерацию псевдослучайных чисел, выделение памяти, контроль процессов, окружения, сигналов, поиска и сортировки. |
<string.h> | Для работы с различными видами строк. |
<tgmath.h> | Для типовых математических функций. (Появилось в C99) |
<time.h> | Для конвертации между различными форматами времени и даты. |
<wchar.h> | Для обработки «широких» потоков и нескольких видов строк при помощи «широких» символов (поддержка набора языков). (Появилось в NA1) |
<wctype.h> | Для классификации «широких» символов. (Появилось в NA1) |
Стандартная библиотека Си в других языках
Некоторые языки обеспечивают функциональность стандартной библиотеки Си при помощи своих собственных библиотек. Библиотека может быть адаптирована для структур языка, но семантика операций остается схожей. Язык программирования C++, например, содержит функциональность стандартной библиотеки ANSI Си в пространстве имен std (например, std::printf
, std::atoi
, std::feof
и т. д.), в заголовочных файлах со схожими именами как в Си («cstdio
», «cmath
», «cstdlib
» и т. д.). К другим языкам, в которых применяются схожие подходы относятся, например, D и Python. В последнем, к примеру, встроенный объект file определен как «реализованный при помощи пакета stdio языка Си»[1], так что доступные операции (открытие, чтение, запись и т. д.), как ожидается, должны иметь поведение как у соответствующих функий языка Си.
Общая поддержка библиотек
Пока не стандартизировано, но программы на языке Си могут зависеть от библиотек подпрограмм, которые содержат код, используемый компилятором во время работы. Код, инициализирующий процесс для операционной системы, например, перед вызовом main()
, реализован в библиотеке времени исполнения языка Си (C Run-Time Library, CRT) для данной версии компилятора. Код библиотеки CRT может помочь с реализацией других особенностей языка, как например, обработка неперехваченных исключений или реализация работы с числами с плавающей точкой.
Стандартная библиотека языка Си только регламентирует наличие вышеупомянутых подпрограмм и их поведение. Так как реализация компилятора может зависеть от наличия этих дополнительных функций, то все зависит от того, какие подпрограммы собраны в Стандартную библиотеку языка Си, таким образом любая программа, разработанная с их помощью, будет нуждаться в них.
Хотя часто путают их со Стандартной библиотекой языка Си из-за их комплектации, библиотека CRT не является стандартизированной частью языка и зависит от особенностей поставки программного продукта.
Встроенные функции компилятора
Некоторые компиляторы (например, GCC[1]) поддерживают внутренние версии множества функций Стандартной библиотеки языка Си; то есть, реализации функций записываются в компилируемый объектный модуль, а программа вызывает внутренние версии вместо функций общей библиотеки Си. Это уменьшает накладные расходы при вызове функции, особенно если вызов функции заменяется встроенными вариантами, и разрешается использование других форм оптимизации (если компилятор поддерживает управление характеристиками внутренних вариантов), но может приводить к проблемами при отладке (например, внутренние версии не могут быть заменены инструментальными версиями для проверки).
Стандартная библиотека POSIX
POSIX (и SUS) определяют число подпрограмм, которые могут быть доступны помимо определенных в Стандартной библиотеке языка Си; они часто реализуют аналогичную функциональность со Стандартной библиотекой с различной степенью схожести. Например, glibc реализует такие функции как fork в libc.so, но перед вызовом библиотеки потоков объединяются в glibc, хотя это заявлено как отдельная библиотека с собственным флагом линковщика. Зачастую, такая POSIX-совместимая функциональность рассматривается как часть библиотеки; соответствующая библиотека Си, таким образом, может быть идентифицирована как ANSI или ISO библиотека языка Си.
Реализации
Существует множество реализаций, поставляемых как с различными операционными системами, так и с компиляторами языка Си. На BSD системах, к примеру, системная библиотека встроена в операционную систему и поддерживается общим репозиторием исходников. На большинстве систем библиотека может быть найдена под именем «libc
».
Хотя существует очень много реализаций, вот небольшой список самых популярных библиотек:
- GNU C Library — самая распространенная реализация, используемая в Linux
- Microsoft C Run-time Library
- dietlibc — альтернативная небольшая реализация Стандартной библиотеки языка Си
- uClibc — Стандартная библиотека языка Си для встраиваемых систем на базе Linux (MMU-less)
- Newlib — Стандартная библиотека языка Си для встраиваемых систем (MMU-less)[2]
- klibc — применяется главным образом для загрузки Linux-систем.
- eglibc — разновидность glibc для встраиваемых систем.
См. также
Ссылки
Дополнительные источники
Стандартная библиотека языка C++ — это… Что такое Стандартная библиотека языка C++?
В языке программирования C++ термин Стандартная Библиотека означает коллекцию классов и функций, написанных на базовом языке. Стандартная Библиотека поддерживает несколько основных контейнеров, функций для работы с этими контейнерами, объектов-функции, основных типов строк и потоков (включая интерактивный и файловый ввод-вывод), поддержку некоторых языковых особенностей, и часто используемые функции для выполнения таких задач, как, например, нахождение квадратного корня числа. Стандартная Библиотека языка C++ также включает в себя спецификации стандарта ISO C90 стандартной библиотеки языка Си. Функциональные особенности Стандартной Библиотеки объявляются внутри пространства имен std.
Стандартная библиотека шаблонов (STL) — подмножество стандартной библиотеки C++ и содержит контейнеры, алгоритмы, итераторы, объекты-функции и т. д.[источник не указан 1011 дней] Хотя некоторые программисты используют термин «STL» вместо (или попеременно) с термином «Стандартная библиотека C++».
Заголовочные файлы стандартной библиотеки C++ не имеют расширения «.h».
В стандартной библиотеке C++ — последние расширения C++ стандарта ANSI (включая библиотеку стандартных шаблонов и новую библиотеку iostream). Она представляет собой набор файлов заголовков. В новых файлах заголовков отсутствует расширение H.[1]
Начиная с Visual Studio .NET 2003, Visual C++ больше не предоставляет старые библиотеки iostream[1]
Стандартные заголовочные файлы
Нижеперечисленные файлы содержат объявления Стандартной Библиотеки.
Контейнеры
- <bitset>
- Реализует специализированный класс контейнеров
std::bitset
— битовый массив. - <deque>
- Реализует шаблон класса контейнера
std::deque
— очередь с двусторонним доступом. - <list>
- Реализует шаблон класса контейнера
std::list
— двусвязный список. - <map>
- Реализует шаблоны классов контейнеров
std::map
иstd::multimap
— Ассоциативный массив и мультиотображение. - <queue>
- Реализует класс адаптер-контейнера
std::queue
— односторонняя очередь. - <set>
- Реализует шаблоны классов контейнеров
std::set
иstd::multiset
— сортированные ассоциативные контейнеры или множества. - <stack>
- Реализует класс адаптер-контейнера
std::stack
— стек. - <vector>
- Реализует шаблон класса контейнеров
std::vector
— динамический массив.
Общие
- <algorithm>
- Реализует определения многих алгоритмов для работы с контейнерами.
- <functional>
- Реализует несколько объект-функций, разработанных для работы со стандартными алгоритмами.
- <iterator>
- Реализует классы и шаблоны для работы с итераторами.
- <locale>
- Реализует классы и шаблоны для работы с локалями.
- <memory>
- Реализует инструменты управления памятью в C++, включая шаблон класса
std::auto_ptr
. - <stdexcept>
- Содержит стандартную обработку ошибок классов, например,
std::logic_error
иstd::runtime_error
, причем оба происходят изstd::exception
. - <utility>
- реализует шаблон класса
std::pair
для работы с парами (двучленными кортежами) объектов.
Строковые
- <string>
- Реализует стандартные строковые классы и шаблоны.
Поточные и ввода-вывода
- <fstream>
- Реализует инструменты для файлового ввода и вывода. Смотри fstream.
- <ios>
- Реализует несколько типов и функций, составляющих основу операций с iostreams.
- <iostream>
- Реализует основы ввода и вывода языка C++. Смотри iostream.
- <iosfwd>
- Реализует предварительные объявления нескольких шаблонов классов, связанных с вводом-выводом.
- <iomanip>
- Реализует инструменты для работы с форматированием вывода, например базу, используемую при форматировании целых и точных значений чисел с плавающей запятой.
- <istream>
- Реализует шаблон класса
std::istream
и других необходимых классов для ввода. - <ostream>
- Реализует шаблон класса
std::ostream
и других необходимых классов для вывода. - <sstream>
- Реализует шаблон класса
std::sstream
и других необходимых классов для работы со строками. - <streambuf>
Числовые
- <complex>
- Реализует шаблон класса
std::complex
и связанные функции для работы с комплексными числами. - <numeric>
- Реализует алгоритмы для числовой обработки
- <valarray>
- Реализует шаблон класса
std::valarray
— класс массивов, оптимизированный для числовой обработки.
Языковая поддержка
- <exception>
- Реализует несколько типов и функций, связанных с обработкой исключений, включая
std::exception
— базовый класс всех перехватов исключений в Стандартной Библиотеке. - <limits>
- реализует шаблон класса
std::numeric_limits
, используемый для описания свойств базовых числовых типов. - <new>
- Реализует операторы
new
иdelete
, а также другие функции и типы, составляющие основу управления памятью в C++. - <typeinfo>
- Реализует инструменты для работы с динамической идентификацией типа данных в C++.
Стандартная Библиотека языка Си
Каждый заголовочный файл из стандартной библиотеки языка Си включен в стандартную библиотеку языка C++ под различными именами, созданных путем отсечения расширения .h и добавлением ‘c’ в начале, например, ‘time.h’ стал ‘ctime’. Единственное отличие между этими заголовочными файлами и традиционными заголовочными файлами стандартной библиотеки языка Си заключается в том, что функции должны быть помещены в пространство имен std:: (хотя некоторые компиляторы сами делают это). В стандарте ISO C функции стандартной библиотеки разрешены для реализации макросами, которые не разрешены в ISO C++.
См. также
Литература
Ссылки
Примечания
Библиотека C
— Справочник по C ++
Библиотека C ++ включает те же определения, что и библиотека языка C, организованная в той же структуре файлов заголовков, со следующими отличиями:
- Каждый файл заголовка имеет то же имя, что и версия языка C, но с префиксом «c» и без расширение. Например, эквивалент C ++ для заголовочного файла языка C
— это . - Каждый элемент библиотеки определен в пространстве имен std.
Тем не менее, для совместимости с C, традиционное имя заголовка.h (как и stdlib.h) также имеют те же определения в глобальном пространстве имен. В примерах, приведенных в этом справочнике, эта версия используется, поэтому примеры полностью совместимы с C, хотя в C ++ ее использование не рекомендуется.
Также есть определенные изменения в реализации C ++:
- wchar_t, char16_t, char32_t и bool являются фундаментальными типами в C ++ и поэтому не определены в соответствующем заголовке, где они появляются в C. То же самое относится к нескольким макросам в C ++. заголовок
, которые являются ключевыми словами в C ++. - Следующие функции имеют изменения в своих объявлениях, связанных с постоянством их параметров: strchr, strpbrk, strrchr, strstr, memchr.
- Функции atexit, exit и abort, определенные в
, имеют дополнения к своему поведению в C ++. - Перегруженным версиям некоторых функций предоставляются дополнительные типы в качестве параметров и та же семантика, например, версии функций с плавающей запятой и длинные двойные функции в файле заголовка cmath или длинные версии для abs и div.
Примечание к исполнению
C ++ 98 включает библиотеку C, как описано в стандарте ISO C 1990 года и его поправке № 1 (ISO / IEC 9899: 1990 и ISO / IEC 9899: 1990 / DAM 1).
C ++ 11 включает библиотеку C, как описано в стандарте ISO C 1999 г. и его Технических исправлениях 1, 2 и 3 (ISO / IEC 9899: 1999 и ISO / IEC 9899: 1999 / Cor.1,2,3), плюс
Другие введения стандарта ISO C 2011 года несовместимы с C ++.
.
Использование библиотек C для программ на C ++
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Библиотека концепций | |
Основные концепции библиотеки [править] | |
Библиотека сопрограмм | |
Coroutine [править] | |
Библиотека утилит | |
Утилиты общего назначения: управление программой, распределение динамической памяти, случайные числа, сортировка и поиск [править] | |
Функции и макроконстанты для управления сигналами [править] | |
Макрос (и функция), который сохраняет (и выполняет переход) в контекст выполнения [править] | |
Обработка списков аргументов переменной длины [править] | |
Утилиты информации о типах времени выполнения [править] | |
std :: type_index [править] | |
Информация о типе времени компиляции [править] | |
std :: bitset шаблон класса [править] | |
Функциональные объекты, вызовы функций, операции привязки и оболочки ссылок [править] | |
Различные компоненты утилит [править] | |
Утилиты времени / даты в стиле C [править] | |
C ++ [править] | |
Стандартные макросы и определения типов [править] | |
std :: initializer_list шаблон класса [править] | |
std :: tuple шаблон класса [править] | |
std :: any class [править] | |
std :: optional class template [править] | |
std :: variant class template [править] | |
Поддержка оператора трехстороннего сравнения [править] | |
Предоставляет информацию о библиотеке, зависящую от реализации [править] | |
Предоставляет средства для получения местоположения исходного кода [править] | |
Динамическое управление памятью | |
Утилиты управления низкоуровневой памятью [править] | |
Утилиты управления памятью высокого уровня [править] | |
Вложенный класс распределителя [править] | |
Полиморфные распределители и ресурсы памяти [править] | |
Числовые пределы | |
Пределы целочисленных типов [править] | |
Пределы типов с плавающей запятой [править] | |
Целочисленные типы фиксированной ширины и ограничения других типов [править] | |
Макросы форматирования, intmax_t и uintmax_t математика и преобразования [править] | |
Единый способ запроса свойств арифметических типов [править] | |
Обработка ошибок | |
Утилиты обработки исключений [править] | |
Стандартные объекты исключения [править] | |
Условно скомпилированный макрос, сравнивающий свой аргумент с нулем [править] | |
Определяет std :: error_code, код ошибки, зависящий от платформы [править] | |
Макрос, содержащий номер последней ошибки [править] | |
Библиотека строк | |
Функции для определения категории узких персонажей [править] | |
Функции для определения категории широких символов [править] | |
Различные функции обработки строк с узкими символами [править] | |
Различные функции обработки широких и многобайтовых строк [править] | |
Функции преобразования символов Unicode в стиле C [править] | |
шаблон класса std :: basic_string [править] | |
std :: basic_string_view шаблон класса [править] | |
std :: to_chars и std :: from_chars [править] | |
Библиотека форматирования, включая std :: format [править] | |
Библиотека контейнеров | |
std :: array container [править] | |
std :: vector контейнер [править] | |
контейнер std :: deque [править] | |
std :: list контейнер [править] | |
контейнер std :: forward_list [править] | |
ассоциативные контейнеры std :: set и std :: multiset [править] | |
ассоциативные контейнеры std :: map и std :: multimap [править] | |
std :: unordered_set и std :: unordered_multiset неупорядоченные ассоциативные контейнеры [править] | |
std :: unordered_map и std :: unordered_multimap неупорядоченные ассоциативные контейнеры [править] | |
адаптер контейнера std :: stack [править] | |
адаптеры контейнера std :: queue и std :: priority_queue [править] | |
std :: span view [править] | |
Библиотека итераторов | |
Итераторы диапазона [править] | |
Библиотека диапазонов | |
Диапазон доступа, примитивы, требования, утилиты и адаптеры [править] | |
Библиотека алгоритмов | |
Алгоритмы, работающие с диапазонами [править] | |
Предопределенные политики выполнения для параллельных версий алгоритмов [править] | |
Числовая библиотека | |
Общие математические функции [править] | |
Тип комплексного числа [править] | |
Класс для представления массивов значений и управления ими [править] | |
Генераторы и распределения случайных чисел [править] | |
Числовые операции со значениями в диапазонах [править] | |
Рациональная арифметика времени компиляции [править] | |
Функции доступа к среде с плавающей точкой [править] | |
Функции обработки битов [править] | |
Математические константы [править] | |
Библиотека локализации | |
[править] | |
C [править] | |
(C ++ 11) (не рекомендуется в C ++ 17) | средства преобразования Unicode [править] |
Библиотека ввода / вывода | |
Прямое объявление всех классов в библиотеке ввода / вывода [править] | |
класс std :: ios_base, шаблон класса std :: basic_ios и несколько определений типов [править] | |
шаблон класса std :: basic_istream и несколько определений типов [править] | |
шаблоны классов std :: basic_ostream, std :: basic_iostream и несколько определений типов [править] | |
Несколько стандартных потоковых объектов [править] | |
std :: basic_fstream, std :: basic_ifstream, std :: basic_ofstream шаблоны классов и несколько определений типов [править] | |
std :: basic_stringstream, std :: basic_istringstream, std :: basic_ostringstream шаблоны классов и несколько определений типов [править] | |
std :: basic_osyncstream, std :: basic_syncbuf и typedefs [править] | |
std :: strstream, std :: istrstream, std :: ostrstream [править] | |
Вспомогательные функции для управления форматом ввода и вывода [править] | |
std :: basic_streambuf шаблон класса [править] | |
Функции ввода-вывода в стиле C [править] | |
Библиотека файловой системы | |
std :: path class и вспомогательные функции [править] | |
Библиотека регулярных выражений | |
Классы, алгоритмы и итераторы для поддержки обработки регулярных выражений [править] | |
Библиотека атомных операций | |
[править] | |
Библиотека поддержки потоков | |
std :: thread class и вспомогательные функции [править] | |
Стоп-токены для std :: jthread [править] | |
Примитивы взаимного исключения [править] | |
Общие примитивы взаимного исключения [править] | |
Примитивы для асинхронных вычислений [править] | |
Условия ожидания потока [править] | |
семафоров [править] | |
[править] | |
барьеров [править] |
.Справочник
— Справочник C ++
Справочник по стандартной библиотеке C ++
Библиотека C
Элементы библиотеки языка C также включены в качестве подмножества стандартной библиотеки C ++. Они охватывают множество аспектов, от общих служебных функций и макросов до функций ввода / вывода и функций управления динамической памятью:
-
(assert.h) - Библиотека диагностики C (заголовок)
-
(ctype.h) - Функции обработки символов (заголовок)
-
(errno.h) - C Errors (header)
-
(fenv.h) - Floating- среда (заголовок)
-
(float.h) - Характеристики типов с плавающей запятой (заголовок)
-
(inttypes.h) - Целочисленные типы C ( заголовок)
-
(iso646.h) - ISO 646 Альтернативное написание оператора (заголовок)
-
(limits.h) - Размеры целых типов (заголовок)
-
(locale.h) - Библиотека локализации C (заголовок)
-
(math.h) - Числовая библиотека C (заголовок)
-
(setjmp.h) - Нелокальные переходы ( заголовок)
-
(signal.h) - Библиотека C для обработки сигналов (заголовок)
-
(stdarg.h) - Обработка переменных аргументов (заголовок)
-
(stdbool.h) - Логический тип (заголовок)
-
(stddef.h) - C Стандартные определения (заголовок)
-
(stdint.h) - Целочисленные типы (заголовок)
-
(stdio.h) - Библиотека C для выполнения операций ввода / вывода (заголовок)
-
(stdlib.h) - Стандартная библиотека общих утилит C (заголовок)
-
(строка .h) - Строки C (заголовок)
-
(tgmath.h) - Типовые математические операции (заголовок)
-
(time.h) - C Time Library (заголовок)
-
(uchar.h) - Символы Unicode (заголовок)
-
(wchar.h) - Широкие символы (заголовок)
-
(wctype.h) - Широкий тип символов (заголовок)
Контейнеры
-
- Заголовок массива (заголовок)
-
- Bitset header (header)
-
- Deque header (header)
-
- Форвардный список (заголовок)
-
- Заголовок списка (заголовок)
- Заголовок карты (заголовок)
- < queue>
- Заголовок очереди (заголовок)
-
- Установить заголовок (header)
-
- Заголовок стека (заголовок)
-
- Заголовок (заголовок) неупорядоченной карты
-
- Заголовок неупорядоченного набора (заголовок)
90 012 Заголовок вектора (заголовок)
Библиотека потоков ввода / вывода
Предоставляет функциональные возможности для использования абстракции, называемой потоками , специально разработанной для выполнения операций ввода и вывода с последовательностями символов, такими как файлы или строки.
Эта функциональность предоставляется через несколько связанных классов, как показано на следующей карте отношений, с соответствующими именами файлов заголовков вверху:
Библиотека Atomics и потоков
- <атомарный>
- Атомарный (заголовок)
- <переменная_условия>
- Переменная условия (заголовок)
- <будущее>
- Будущее (заголовок)
- mutex>
- Mutex (заголовок)
-
- Thread (header)
Разные заголовки
- <алгоритм>
- Стандартная библиотека шаблонов: алгоритмы (библиотека
)
-
- Библиотека времени (заголовок)
-
- Фасеты преобразования Unicode (заголовок)
-
- Библиотека комплексных чисел (заголовок )
- <исключение>
- Стандартные исключения (заголовок)
- <функциональный>
- Функциональные объекты (заголовок)
-
- Список инициализаторов (заголовок)
-
- Определения итератора (заголовок)
-
- Числовые ограничения (заголовок)
-
- Библиотека локализации (заголовок)
- <память>
- Элементы памяти (заголовок)
- <новый>
- Динамический память (заголовок)
-
- Обобщенные числовые операции (заголовок)
-
- Random (заголовок)
-
- Ratio header ( заголовок)
-
- Регулярные выражения (заголовок)
-
- Классы исключений (заголовок)
-
- Строки (заголовок)
-
- Системные ошибки (заголовок)
-
- Библиотека кортежей (заголовок)
-
- Индекс типа (заголовок)
-
- Информация о типе (заголовок)
-
- type_traits (header)
- <утилита>
- Компоненты утилиты (заголовок)
-
- Библиотека массивов числовых значений (заголовок)
90 014
Ход обновления
В настоящее время ведется работа по обновлению всей ссылки на последний стандарт.Чтобы проверить состояние каждого заголовка, см. Ход обновления .
.