Стандартна бібліотека мови C

Ця стаття не містить посилань на джерела. Ви можете допомогти поліпшити цю статтю, додавши посилання на надійні (авторитетні) джерела. Матеріал без джерел може бути піддано сумніву та вилучено. (серпень 2019)
Стандартна бібліотека C++
  • Ввід/вивід
  • Рядки
Стандартна бібліотека шаблонів
  • Algorithm (C++)
  • Functional (C++)
  • Ітератор
  • Послідовний контейнер
  • Асоціативні контейнери
  • Невпорядковані асоціативні контейнери
  • Розподільник (C++)
Стандартна бібліотека С
  • Типи даних
  • Класифікація символів
  • Рядки
  • Математичні функції
  • Файловий ввід/вивід
  • Дата/час
  • Локалізація
  • Алокація пам’яті
  • Управління процесом
  • Сигнали
  • Альтернативні вирази
Інші заголовки:
  • <assert.h>
  • <errno.h>
  • <setjmp.h>
  • <stdarg.h>
  • п
  • о
  • р

Стандартна бібліотека мови C (також відома як libc) — стандартна бібліотека для мови програмування C, що відповідає стандартам ISO.[1] Починаючи з оригінального стандарту ANSI C, бібліотека C розроблена у той же час, що й специфікація C POSIX library, яка є його надмножиною.[2][3]

Структура

Ім'я та характеристики кожної функції вказуються у заголовному файлі, але поточна реалізація функцій описана окремо в бібліотечному файлі. Найменування і можливості заголовних файлів стають загальними, але організація бібліотек залишається різнотипною. Через те, що компілятори мови C часто забезпечують розширену функціональність, не визначену стандартом ANSI C, стандартна бібліотека одного компілятора несумісна зі стандартними бібліотеками інших компіляторів.[джерело?]

Історія

Мова програмування C до стандартизації не забезпечувала вбудованої функціональності, як, наприклад, операції вводу-виводу (на відміну від таких традиційних мов, як Кобол і Фортран). Для підтримки цієї функціональності у спільноті програмістів, які працювали з мовою C, зародилися ідеї, реалізовані в те, що зараз називається Стандартною бібліотекою мови C. Більшість цих ідей в підсумку об'єдналися у визначенні стандарту мови програмування C.

Стандарт ANSI

І Unix, і C були створені в AT&T Bell Laboratories в кінці 1960-х — початку 1970-х. В 1970-ті мову програмування C почав користуватися неймовірною популярністю. Безліч університетів і організацій розпочали створення власних варіантів мови, більш відповідних для власних потреб. З початком 1980-х проблеми сумісності між різними реалізаціями мови C стали занадто очевидними. У 1983 році Американський національний інститут стандартів (ANSI) сформував комітет для прийняття стандарту мови C, відомий як «ANSI C». Ця робота вилилася в створення так званого стандарту C89 в 1989. Частина підсумкового стандарту була набором бібліотек, названа Стандартна бібліотека ANSI C.

Подальші версії стандарту мови C додавали деякі нові і найбільш корисні заголовні файли в бібліотеку. Підтримка цих нових розширень залежала від реалізації.

Заголовні файли <iso646.h>, <wchar.h> і <wctype.h> були додані в Додатку 1 (скорочено NA1) — доповненні до Стандарту мови C, ратифікованій в 1995.

Заголовні файли <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> і <tgmath.h> додані у стандарті C99, опублікованому 1999-го року.

Стандартна бібліотека ANSI C складається з 24 заголовних файлів, кожен з яких можна підключати до програмного проекту за допомогою однієї директиви. Кожен заголовний файл містить оголошення однієї або більше функцій, визначення типів даних і макроси. Зміст цих заголовків файлів перераховується нижче.

В порівнянні з деякими іншими мовами (наприклад Java) стандартна бібліотека вкрай мала. Бібліотека забезпечує підтримку основного набору математичних функцій, обробку рядків, конвертацію типів, файлове та консольне введення-виведення. Вона не містить стандартний набір «контейнерних типів» як стандартна бібліотека шаблонів мови C++, компоненти для роботи з графічним призначеним для користувача інтерфейсом (GUI), мережею[сумнівно — обговорити] та іншої різноманітної функціональності, яку Java підтримує за стандартом. Головною перевагою маленької стандартної бібліотеки є спрощення роботи з оточенням ANSI C порівняно з іншими мовами, а отже і спрощення портування програм мовою C на нові платформи.

Безліч інших бібліотек було розроблено для підтримки схожої функціональності, забезпечувана іншими мовами в їх стандартних бібліотеках. Наприклад, у проекті розробки робочого середовища GNOME був розроблений набір графічних інструментів GTK + та GLib — бібліотека контейнерних структур даних, як втім і безліч інших відомих прикладів. Різноманітність доступних бібліотек означає, що деякі інструменти верхнього рівня, з часом підтвердили свою корисність. Значним мінусом є те, що вони часто не надто успішно взаємодіють один з одним, тому програмістам часто звичніше працювати з різними наборами бібліотек, а їх набори можуть бути доступні на різних специфічних платформах.

Бібліотечні заголовкові файли ANSI C

Назва Стандарт Опис
<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> C95 Для програмування в кодуванні ISO 646.
<limits.h> Містить наперед задані константи, що визначають специфіку реалізації властивостей цілих типів, як, наприклад, область припустимих значень (_MIN, _MAX).
<locale.h> Для setlocale () і пов'язаних констант. Використовується для вибору відповідної мови.
<math.h> Для обчислення основних математичних функцій
<setjmp.h> Оголошує макроси setjmp </ tt> і longjmp </ tt>, використовувані для нелокальних переходів
<signal.h> Для управління обробкою [[Сигнал (операційні системи> | сигналів]]
<stdalign.h> С11 Макроси Alignas та Alignof
<stdarg.h> Для доступу до різної кількості аргументів, переданих функціям.
<stdbool.h> C99 Для булевих типів даних.
<stdint.h> C99 Для визначення різних типів цілих чисел.
<stddef.h> Для визначення декількох стандартних типів і макросів.
<stdio.h> Реалізує основні можливості введення і виведення в мові C. Цей файл містить дуже важливу функцію printf .
<stdlib.h> Для виконання безлічі операцій, включаючи конвертацію, генерацію псевдовипадкових чисел, виділення пам'яті, контроль процесів, оточення, сигналів, пошуку і сортування.
<string.h> Для роботи з різними видами рядків.
<tgmath.h> C99 Для типових математичних функцій.
<time.h> Для конвертації між різними форматами часу та дати.
<wchar.h> NA1 Для обробки «широких» потоків і декількох видів рядків за допомогою «широких» символів (підтримка набору мов).
<wctype.h> NA1 Для класифікації «широких» символів.

Стандартна бібліотека C в інших мовах

Деякі мови забезпечують функціональність стандартної бібліотеки C за допомогою своїх власних бібліотек. Бібліотека може бути адаптована для структур мови, але семантика операцій залишається схожою. Мова програмування C ++, наприклад, містить функціональність стандартної бібліотеки ANSI C в просторі імен std (наприклад, std :: printf, std :: atoi, std :: feof і т. Д.), В заголовних файлах з схожими іменами як в C («cstdio», «cmath», «cstdlib» і т. д.). До інших мов, в яких застосовуються схожі підходи відносяться, наприклад, D і Python. В останньому, наприклад, вбудований об'єкт file визначений як «реалізований за допомогою пакета stdio мови C»[джерело?], так що доступні операції (відкриття, читання, запис і т. Д.), Як очікується, повинні мати поведінку як у відповідних Функ мови C.

Реалізації

Існує безліч реалізацій, що поставляються як з різними операційними системами, так і з компіляторами мови C. На BSD системах, наприклад, системна бібліотека вбудована в операційну систему і підтримується загальним репозиторієм початкових кодів системи. На більшості систем бібліотека може бути знайдена під ім'ям « libc ».

Хоча існує дуже багато реалізацій, ось невеликий список найпопулярніших бібліотек:

  • GNU C Library — найпоширеніша реалізація, використовувана в Linux
  • Microsoft C Run-time Library
  • Dietlibc — альтернативна невелика реалізація Стандартної бібліотеки мови C
  • uClibc[en] — Стандартна бібліотека мови C для вбудованих систем на базі Linux
  • Newlib — Стандартна бібліотека мови C для вбудованих систем (без MMU)[4]
  • Klibc — застосовується головним чином для завантаження Linux-систем.
  • Eglibc — різновид glibc для вбудованих систем.
  • musl — орієнтована на вбудовувані Linux-системи.

Примітки

  1. §7. ISO/IEC 9899:2018(E): Programming Languages - C (англ.). ISO/IEC. 2018.
  2. The GNU C Library – Introduction. gnu.org. Процитовано 5 грудня 2013.
  3. Difference between C standard library and C POSIX library. stackoverflow.com. 2012. Процитовано 4 березня 2015.
  4. Re: Чи підтримує Newlib процесори без MMU?.