encyklopedia.space

C Standard Library

C Standard Library (pol. biblioteka standardowa języka C) to zbiór funkcji, makr i typów danych określonych w normie ISO/IEC 9899, czyli w oficjalnym standardzie języka C. Biblioteka zapewnia programistom przenośny dostęp do podstawowych operacji wejścia/wyjścia, manipulacji łańcuchami znaków, alokacji pamięci, obliczeń matematycznych, obsługi czasu i wielu innych zagadnień niezbędnych w praktycznym programowaniu.

Historia

Początkowo funkcje pomocnicze były dostarczane przez poszczególne kompilatory i systemy operacyjne. W 1978 r. wprowadzono pierwszą wersję biblioteki K&R C, a w 1989 r. (standard C89) powstała ustandaryzowana Standard C Library. Następnie w standardach C99, C11 i C18 zestaw nagłówków i ich zawartość był rozbudowywany, ale podstawowa struktura pozostała niezmienna.

Struktura i organizacja

Biblioteka podzielona jest na grupy nagłówków, z których każdy definiuje określony zestaw funkcji i typów. Poniżej przedstawiono najważniejsze grupy oraz najważniejsze nagłówki.

Podstawowe grupy

  • Wejście/wyjście – obsługa strumieni, plików i konsoli.
    Nagłówki: <stdio.h>, <stdio_ext.h> (POSIX).
  • Alokacja pamięci i zarządzanie – dynamiczna pamięć, kopiowanie, porównywanie.
    Nagłówki: <stdlib.h>, <malloc.h> (niekiedy dodatkowy).
  • Manipulacja łańcuchami znaków – funkcje operujące na char* i wchar_t*.
    Nagłówki: <string.h>, <strings.h> (POSIX), <wchar.h>.
  • Operacje matematyczne – funkcje trygonometryczne, logarytmy, stałe.
    Nagłówki: <math.h>, <complex.h> (liczby zespolone).
  • Czas i data – struktury i funkcje do obsługi czasu rzeczywistego.
    Nagłówki: <time.h>, <sys/time.h> (POSIX).
  • Obsługa znaków i klasyfikacja – funkcje klasyfikujące znaki według locale.
    Nagłówki: <ctype.h>, <locale.h>.
  • Definicje stałych i typów – rozmiary, limity i makra.
    Nagłówki: <stddef.h>, <stdint.h>, <limits.h>, <float.h>.
  • Obsługa błędów i diagnostyka – raportowanie błędów, asercje.
    Nagłówki: <errno.h>, <assert.h>.
  • Wielowątkowość (od C11) – funkcje do zarządzania wątkami i synchronizacji.
    Nagłówek: <threads.h> (standard C11).

Przykładowa tabela najważniejszych nagłówków

Nagłówek Główne grupy funkcji Przykładowe funkcje
<stdio.h> Wejście/wyjście printf, scanf, fopen, fclose
<stdlib.h> Alokacja pamięci, konwersje, zakończenie programu malloc, free, atoi, exit
<string.h> Operacje na łańcuchach strcpy, strlen, strcmp, memcpy
<math.h> Funkcje matematyczne sin, cos, sqrt, log
<time.h> Obsługa czasu time, strftime, clock

Implementacja i przenośność

Choć standard definiuje jedynie interfejs – czyli zestaw nagłówków i ich sygnatur – poszczególne implementacje (np. glibc, musl, MSVCRT) dostarczają własne, wewnętrzne źródła kodu. Przestrzeganie standardu zapewnia, że program napisany z użyciem jedynie funkcji z biblioteki standardowej będzie się kompilował i działał na każdego kompilatora C zgodnego z ISO.

Rozszerzenia systemowe i POSIX

Systemy uniksowe udostępniają dodatkowe nagłówki (np. <unistd.h>, <sys/socket.h>) opisane w standardzie POSIX. Są one szeroko wykorzystywane w programowaniu systemowym, ale nie wchodzą w skład C Standard Library i dlatego nie są przenośne na platformy, które nie implementują POSIX.

Przykładowy program

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    const char *tekst = "C Standard Library";
    char *kopi = malloc(strlen(tekst) + 1);
    if (!kopi) {
        perror("malloc");
        return EXIT_FAILURE;
    }

    strcpy(kopi, tekst);
    printf("Tekst: %s\n", kopi);
    free(kopi);
    return EXIT_SUCCESS;
}

Powyższy króciutki program ilustruje wykorzystanie trzech najważniejszych nagłówków <stdio.h>, <stdlib.h> i <string.h>. Wszystkie funkcje pochodzą wyłącznie z biblioteki standardowej, co gwarantuje ich dostępność na każdej platformie zgodnej ze standardem C.

Wpływ na inne języki

Wiele języków programowania (np. C++, Objective‑C) korzysta z tej samej biblioteki lub implementuje własne wersje zgodne ze specyfikacją C, co ułatwia współdzielenie kodu i integrację z istniejącymi systemami.

Patrząc w przyszłość

Standard ten jest aktywnie rozwijany. Projekt ISO C pracuje nad nowymi dodatkami, takimi jak lepsza obsługa wątków (<threads.h>), rozszerzenia dla liczb zmiennoprzecinkowych (np. <stdnoreturn.h>) oraz mechanizmy zwiększające bezpieczeństwo (np. funkcje *_s wprowadzane w bibliotece C11). Jakkolwiek konkretne implementacje będą się różnić, podstawowa filozofia – zapewnienie przenośnego, wydajnego i minimalnego zestawu narzędzi – pozostaje niezmienna.

Bibliografia i powiązane pojęcia