Biblioteka standardowa języka C
Biblioteka standardowa języka C – biblioteka zawierająca podstawowe procedury języka C. Biblioteka ta jest częścią standardu języka C, początkowo regulowanego normą ANSI a obecnie normą ISO[1].
Wersje
edytujBiblioteka standardowa języka C jest częścią standardu języka C, opublikowanego jako norma ISO/IEC 9989. Pierwszą wersją języka C ustandaryzowanego przez ISO była wersja ISO/IEC 9989:1990[2], bazująca bezpośrednio na poprzedzającym ją standardzie ANSI X3.159-1989[3]. Następnie standard odświeżano w roku 1999 (ISO/IEC 9989:1999[4], znana jako C99), potem w roku 2011 (ISO/IEC 9989:2011[5], znana jako C11) i w roku 2018 (ISO/IEC 9989:2018[1] – obecnie obowiązująca C18). Wraz z każdą wersją standardu języka rozszerzano również możliwości biblioteki standardowej – przykładowo, w wersji C99 dodano m.in. typ liczb zespolonych (nagłówek complex.h
), a w wersji C11 dodano m.in. funkcje do manipulacji znakami w unikodzie (uchar.h
). Obecnie obowiązującą wersją jest C18[1].
Funkcje biblioteki standardowej języka C
edytujBiblioteka zawiera następujące bloki funkcjonalne (w nawiasie podano plik nagłówkowy, który trzeba załączyć by mieć dostęp do pożądanych funkcji):
- wybór podstawowych funkcji wspomagających programowanie w języku, w tym procedury alokacji pamięci, funkcje pseudolosowe i podstawowe konwersje (
<stdlib.h>
) oraz definicje niektórych typów (<stddef.h>
) - buforowane i formatowane funkcje wejścia i wyjścia, w tym funkcje z grupy printf (
<stdio.h>
) - procedury matematyczne, w tym podstawowe funkcje i stałe (
<math.h>
), liczby zespolone (<complex.h>
), funkcje wspierające obsługę liczb zmiennopozycyjnych (<float.h>
,<fenv.h>
), generyczne makra dla funkcji matematycznych (<tgmath.h>
) - procedury operowania na łańcuchach tekstowych (
<string.h>
) - badanie własności znaków i proste konwersje znakowe (
<ctype.h>
,<wctype.h>
) - funkcje daty i czasu (
<time.h>
) - obsługa lokalizacji, m.in. sposób formatowania dat (
<locale.h>
) - definicje maksymalnych i minimalnych wartości dla wbudowanych typów całkowitych (
<limits.h>
) - wsparcie dla typów nieobecnych w czystym języku C: typy całkowite różnych długości (
<inttypes.h>
,<stdint.h>
), typ boolowski (<stdbool.h>
), wielobajtowe typy znakowe: (<wchar.h>
,<uchar.h>
) - obsługa wykonywania programu, w tym obsługa argumentów wywołania programu (
<stdarg.h>
), obsługa tzw. „dalekich skoków” (<setjmp.h>
), wartości błędów zwracane przez funkcje (<errno.h>
), obsługa funkcji, z których nie ma powrotu (<stdnoreturn.h>
), obsługa sygnałów (<signal.h>
) oraz obsługa wielowątkowości (<threads.h>
) i operacje atomowe (<stdatomic.h>
) - obsługa asercji (
<assert.h>
) - makra dot. operacji bitowych i logicznych zgodna z normą ISO 646 (
<iso646.h>
) - zarządzanie sposobem upakowania danych w pamięci (
<stdalign.h>
)
Standardowa biblioteka języka C nie definiuje następujących zestawów funkcji:
- Interfejsu do zarządzania zawartością systemu plików (funkcje takie jak np. tworzenie, usuwanie, zmiana nazwy plików)
- Zarządzania procesami w systemie operacyjnym (cykl życia procesu, uruchamianie zewnętrznych aplikacji)
- Komunikacji międzyprocesowej
- Obsługi wyszukiwania wzorców i wyrażeń regularnych
- Funkcji komunikacyjnych z wykorzystaniem sieci (np. TCP/IP)
- Niskopoziomowych funkcji wejścia i wyjścia
- Niskopoziomowych funkcji obsługi terminala
Tego typu funkcje zwykle są obecne bibliotekach języka C obecnych w systemach operacyjnych, jako rozszerzenie standardowej biblioteki. W systemach Unix biblioteki języka C (libc) typowo implementują interfejs POSIX, który m.in. rozszerza możliwości biblioteki o wyżej wymienione grupy funkcji.
Implementacje
edytujIstnieje wiele implementacji biblioteki standardowej języka C. W systemach Unix i systemach uniksopodobnych biblioteka standardowa języka C jest częścią szerszej tzw. biblioteki języka C (w skrócie libc), która jest używana, bezpośrednio lub pośrednio, przez praktycznie każdy program, niezależnie od języka w jakim jest napisany. Realizacją biblioteki libc jest na przykład biblioteka GNU libc (aktualnie najnowsza jest wersja glibc 2.33, wydana 1 lutego 2021 roku[6]), używana m.in. w systemie GNU/Linux. Innym wariantem libc jest wersja BSD libc.
W systemie Windows, biblioteka standardowa języka C jest zaimplementowana jako część tzw. Universal C Runtime Libraries (UCRT)[7].
Istnieją także lekkie implementacje biblioteki standardowej języka C, jak np. diet libc czy uClibc, projektowane z myślą o urządzeniach przenośnych lub w celu stworzenia implementacji wolnej od historycznych zaszłości, którą będzie łatwiej rozwijać.
Za dosyć lekki wariant biblioteki standardowej języka C uchodzi biblioteka Bionic, która jest używana w systemie Android[8].
Zobacz również
edytujPrzypisy
edytuj- ↑ a b c ISO/IEC 9899:2018 - Information technology -- Programming languages -- C. [dostęp 2019-06-11]. (ang.).
- ↑ ISO/IEC 9899:1990 - Programming languages - C [online], www.iso.org [dostęp 2019-06-13] (ang.).
- ↑ The Current C Programming Language Standard - ISO/IEC 9899:2018 (C18) - ANSI Blog [online], blog.ansi.org [dostęp 2019-06-13] (ang.).
- ↑ ISO/IEC 9899:1999 - Programming languages - C [online], www.iso.org [dostęp 2019-06-13] (ang.).
- ↑ ISO/IEC 9899:2011 - Information technology - Programming languages - C [online], www.iso.org [dostęp 2019-06-13] (ang.).
- ↑ The GNU C Library. [dostęp 2021-04-22]. (ang.).
- ↑ Materiały dotyczące narzędzia Visual Studio 2019, CRT Library Features [online], 17 czerwca 2019 .
- ↑ Mathieu Devos , Bionic vs Glibc report, [w:] Raport semestralny dotyczący pracy magisterskiej, MIT, 2013–2014 [dostęp 2019-06-17] [zarchiwizowane z adresu 2014-03-22] .