Standardowa biblioteka C.

Standardowej biblioteki z C jest standaryzowany zbiór nagłówków i procedur stosowanych w celu realizacji wspólnych operacji, takich jak wejścia / wyjścia i zarządzania ciągów w języku C W przeciwieństwie do innych języków takich jak Pascal i PL / I , C nie zawiera słowa kluczowe dla tych zadań , więc prawie wszystkie programy napisane w C używają biblioteki standardowej, chociażby do wyświetlania wyniku.

Architektura

Nazwa i podpis („prototyp” w C) każdej funkcji są opisane w nagłówkach, które są zawarte w kodzie źródłowym , podczas gdy kod obiektowy funkcji jest oddzielony w bibliotece oprogramowania , która będzie powiązana tylko z kodem źródłowym . reszta programu tylko wtedy, gdy łączącej . Nazwa i przestrzeń nazw nagłówków stały się powszechne. Najczęściej każdy nagłówek to osobny plik , ale organizacja wdrożeń pozostaje zróżnicowana. Biblioteka standardowa była pierwotnie dostarczana z kompilatorem , ale obecnie często jest częścią systemu operacyjnego . W systemach uniksowych zwykle znajduje się w katalogu /usr/lib/i nosi nazwę libc.alub libc.so ; pliki nagłówkowe znajdują się w katalogu /usr/include. Jednak kompilator zawsze wie, gdzie znajdują się te pliki, więc nie ma potrzeby tego mówić.

W systemie Linux zwykle używana jest biblioteka glibc ; w systemie Windows jest to generalnie standardowa biblioteka Visual C ++ , nazywana MSVCR*.dll, ponieważ jest dostępna niezależnie od używanego kompilatora C. Ponieważ kompilatory C często oferują więcej funkcji niż te określone przez standardy ISO i POSIX C , standardowa biblioteka dostarczana z określonym kompilatorem jest słabo kompatybilna ze standardowymi bibliotekami innych kompilatorów dla funkcji, które nie są ustandaryzowane.

Doświadczenie pokazało, że większość standardowej biblioteki C została dobrze zaprojektowana. Jednak niektóre fragmenty z perspektywy czasu wydają się być błędami. Funkcja odczytu linii getsi użycie scanfdo odczytu ciągów wejściowych są źródłem wielu przepełnień bufora , a większość przewodników programowania zaleca unikanie ich używania. Inną starą jest strtokfunkcja zaprojektowana jako prymitywny analizator leksykalny, ale która jest dość „delikatna” i trudna w użyciu. Wreszcie zarządzanie datami i godzinami jest prymitywne, w szczególności w przypadku wirtualnej niemożności zarządzania strefami czasowymi.

Historia

Unix i język programowania C zostały stworzone przez laboratoria AT&T i Bell (AT&T's Bell Laboratories) we wczesnych latach siedemdziesiątych . Prymitywny język C nie zapewniają wbudowane funkcje jakbym operacji wejścia / wyjścia (w przeciwieństwie do tradycyjnych języków takich jak Pascal i Fortran ). Z biegiem czasu społeczności użytkowników języka C dzieliły się pomysłami i implementacjami tego, co obecnie nazywamy biblioteką standardową języka C, aby zapewnić te funkcje. Wiele z tych pomysłów zostało włączonych do ujednoliconej definicji języka programowania C.

W latach siedemdziesiątych C stał się popularny. Wiele uniwersytetów i organizacji stworzyło własne odmiany tego języka na potrzeby swoich projektów. W latach osiemdziesiątych XX wieku pojawiły się problemy ze zgodnością między różnymi implementacjami C.

Normy ANSI i ISO

W 1983 roku Amerykański Narodowy Instytut Normalizacyjny (ANSI) utworzył komitet w celu ustalenia specyfikacji normy dla C, znanej jako „ANSI C”. Kulminacją tej pracy było stworzenie standardu C89 w 1989 roku . Część uzyskanego okazała się zestaw funkcji biblioteki zwany standardem biblioteki ANSI C ( ANSI C Standard biblioteki ). Norma ta stała się normą międzynarodową w 1990 roku i jest również znana jako ISO C (ISO C) .

Późniejsze wersje standardu ISO C dodały do ​​biblioteki nowe funkcje i nagłówki. Obsługa tych rozszerzeń różni się w zależności od implementacji. Nagłówki <iso646.h>, <wchar.h>i <wctype.h>dodano normatywnego poprawki 1 ( normatywne Poprawka 1 ), dalej w skrócie przez Amd.1 , który jest dodatkiem do standardowego C ratyfikowane 1995 . Nagłówki <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h>i <tgmath.h>dodano do C99 przeglądu standardu C, opublikowanej w 1999 r .

Biblioteka standardu ISO C składa się z 24 nagłówków, które można włączyć do projektu programisty za pomocą jednej dyrektywy. Każdy nagłówek zawiera prototypy funkcji, definicje typów i makra. Treść tych nagłówków jest opisana poniżej.

Rozszerzenia

W porównaniu z innymi językami (np. Java ), biblioteka C w standardzie ISO jest niewielka. Zapewnia podstawowy zestaw funkcji matematycznych, operacji na łańcuchach , konwersji typów oraz funkcji wejścia / wyjścia plików i terminala. Nie zawiera standardowej bazy „typów kontenerów”, podobnie jak biblioteka szablonów standardowych języka C ++ . Pomijając graficzne interfejsy użytkownika (Graphical User Interface, w skrócie GUI), narzędzia sieciowe, funkcje synchronizacji między zadaniami i mnóstwo innych funkcji, które Java zapewnia standardowo. Główną zaletą małej biblioteki standardowej jest to, że znacznie łatwiej jest zapewnić środowisko pracy dla C ISO niż dla innych języków, a zatem przenoszenie aplikacji języka C na nowe platformy jest stosunkowo szybkie.

Wiele innych bibliotek zostało napisanych w celu rozwijania funkcjonalności równoważnych z funkcjami zapewnianymi przez inne języki w ich standardowej bibliotece. Na przykład proponowane środowisko graficzne GNOME opracowało Box Tools GIMP (GIMP ToolKit, GTK) i GLib , bibliotekę zawierającą kontenery struktur danych, a jest wiele innych znanych przykładów właściwości. Spośród tej różnorodności dostępnych bibliotek niektóre zestawy narzędzi z biegiem czasu wykazały lepsze możliwości. Główną wadą jest to, że często nie działają one szczególnie dobrze razem, programiści są często zmuszeni do żonglowania kilkoma różnymi bibliotekami, a niektóre funkcje mogą być obecne w różnych formach na każdej platformie, czasem nawet w tej samej. Ważne oprogramowanie.

Nagłówki biblioteki ISO C.

<assert.h> Zawiera makro assertużywane do wykrywania niespójności danych i innych typów błędów w debugowaniu wersji programu. <complex.h> Do obsługi liczb zespolonych (wprowadzonych przez C99). <ctype.h> Funkcje używane do szybkiego klasyfikowania znaków lub konwersji między dużymi i małymi literami niezależnie od używanego systemu kodowania znaków (zestawu znaków) ( ASCII , ISO / IEC 8859-1 , EBCDIC itp.). <errno.h> Zestaw (lub najczęściej podzbiór) kodów błędów zwracanych przez funkcje biblioteki standardowej za pośrednictwem zmiennej errno. <fenv.h> Aby kontrolować zmiennoprzecinkowe zmiennoprzecinkowe środowiska (wprowadzone przez C99). <float.h> Zawiera stałe, które określają właściwości liczb zmiennoprzecinkowych, które zależą od implementacji, takie jak minimalna różnica między dwiema różnymi liczbami zmiennoprzecinkowymi (xxx_EPSILON), maksymalna liczba precyzyjnych cyfr (xxx_DIG) i interwał liczb, które mogą być reprezentowane ( xxx_MIN, xxx_MAX). <inttypes.h> Do precyzyjnych konwersji między typami całkowitymi (wprowadzone przez C99). <iso646.h> Programować przy użyciu zestawu znaków ISO 646 (wprowadzonego przez poprawkę 1). <limits.h> Zawiera stałe, które określają właściwości typów całkowitych, które są zależne od implementacji, takie jak zakresy liczb, które mogą być reprezentowane (xxx_MIN, xxx_MAX). <locale.h> Dostosować się do różnych konwencji kulturowych. <math.h> Aby obliczyć typowe funkcje matematyczne. C99 dodał wiele funkcji matematycznych, w szczególności w celu zbieżności ze standardem IEC 559 znanym również jako IEEE 754 . <setjmp.h> Wykonywanie instrukcji gotonielokalnych (rodzaje wyjątków ). <signal.h> Do sterowania sygnałami (wyjątkowe warunki wymagające natychmiastowego przetworzenia, np. Sygnał użytkownika). <stdarg.h> Tworzenie funkcji ze zmienną liczbą argumentów. <stdbool.h> Aby mieć rodzaj typu boolowskiego (wprowadzonego przez C99). <stddef.h> Definiuje kilka przydatnych typów i makr, takich jak NULL. <stdint.h> Definiuje różne typy liczb całkowitych, jest podzbiorem inttypes.h (wprowadzonym przez C99). <stdio.h> Zapewnia podstawowe funkcje wejścia / wyjścia w języku C, takie jak function printf. <stdlib.h> Wykonywanie różnych operacji, w tym konwersji, generowania liczb pseudolosowych, alokacji pamięci, sterowania procesem, zarządzania środowiskiem i sygnałami, wyszukiwania i sortowania. <string.h> Do obsługi ciągów znaków . <tgmath.h> Do operacji matematycznych na typach ogólnych (wprowadzone przez C99). <threads.h> Implementuje zarządzanie wątkami jako standard libc (wprowadzony przez C11) <time.h> Konwersja między różnymi formatami daty i czasu. <wchar.h> Do obsługi dużych znaków (szerokich znaków), niezbędny do obsługi wielu języków, a zwłaszcza Unicode (wprowadzony przez Amd.1). <wctype.h> Klasyfikowanie szerokich znaków (wprowadzone przez poprawkę 1).

Biblioteka standardowa w C ++

Język programowania C ++ przejmuje funkcjonalność standardowej biblioteki ISO C, ale wprowadza kilka zmian, takich jak transformacja nazw nagłówków z <xxx.h>na <cxxx>(jednak nazwy w stylu C są nadal dostępne, chociaż nieaktualne) i umieść wszystkie identyfikatory w przestrzeni nazw (przestrzeni nazw) std.

Uwagi

  1. Por. PJ Plauger , The Standard C Library , Prentice Hall,1992( ISBN  0-13-838012-0 ) , „Wprowadzenie”, xi : „  Projekt biblioteki Standard C jest poprawiony. Niemniej jednak jest to dobry projekt pod wieloma względami…  ”
  2. Plauger (op. Cit., Rozdz. 14, s.  386 ) przyznaje: „  Czego można się nie spodziewać, to kilka błędów projektowych w funkcjach [string.h]; Funkcje zadeklarowane w <string.h> nie są wynikiem wspólnych wysiłków projektowych. […] Kiedy rozpoczęły się prace nad normalizacją C, było już za późno, aby je „naprawić”.  "
  3. Zobacz na przykład pracę Claude Delannoy , Programmer en langue C , Eyrolles,2005( ISBN  978-2-212-12546-7 ) , str.  151, gdzie autor zaleca łączne użycie funkcji gets i sscanf w celu uniknięcia niepowodzeń spowodowanych przez wywołania scanf.
  4. Por. Ponownie Plauger (op. Cit., Rozdz. 14, str.  405 ): „  Funkcja strtok jest ostatnią i najbardziej nieuporządkowaną z siedmiu funkcji skanowania strun.  "

Zobacz też

Bibliografia

  • Brian Kernighan i Dennis Ritchie ( przetłumaczone przez  Jean-François Groff i Érica Mottiera), Le langue C - C ANSI [„  Język programowania C  ”], Paryż, Masson ,1990, 2 II  wyd. , 280  pkt. [ szczegóły wydań ] ( ISBN  2-225-82070-8 ), Dodatek B Biblioteka standardowa , s.  245-264
  • Międzynarodowa grupa robocza ds. Normalizacji języka programowania C ,
    • (en) ISO / IEC 9899: TC2 WG14 / N1124 , „Projekt komitetu”, 6 maja 2005 r. [ czytaj online ] Najnowszy projekt ISO C99 wraz z poprawką techniczną 2
    • (en) ISO / IEC 9899: TC3 WG14 / N1256 , „Projekt komitetu”, 7 września 2007 [ czytaj online ] Najnowszy projekt ISO C99 wraz z poprawką techniczną 3

Wdrożenia

Linki zewnętrzne