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

Стандартна бібліотека мови 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?.