Standardní knihovna jazyka C: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
překlad - tabulka a == Standardní knihovna jazyka C v jiných jazycích ==
dokončení překladu
Řádek 1: Řádek 1:
{{Pracuje se|2 dnů|9. 9. 2009, 16:48 (UTC)}};

{| class="infobox" style="text-align: center; font-size:90%;"
{| class="infobox" style="text-align: center; font-size:90%;"
|style="text-align: center;" | Standardní hlavičkové soubory
|style="text-align: center;" | Standardní hlavičkové soubory
Řádek 111: Řádek 109:
Některé programovací jazyky zahrnují funkce standardní knihovny jazyka C ve svých vlastních knihovnách. Knihovny v jiných programovacích jazycích jsou většinou přizpůsobené, aby více vyhovovaly struktuře daného programovacího jazyka, ale funkce a smentika je zachována. Programovací jazyk [[C++]] například zahrnuje funkce standardu knihovny ANSI C, co se týče jména funkcí '''std''' (jako <code>std::printf</code>, <code>std::atoi</code>, <code>std::feof</code>, etc.) a podobná jména hlavičkových souborů ("<code>cstdio</code>", "<code>cmath</code>", "<code>cstdlib</code>", atd.). Dalšími jazyky s podobným přístupem k programování, jako má jazyk C jsou: [[D (programovací jazyk)|programovací jazyk D]] a převládající implementace jazyka [[Python (programovací jazyk)|Python]] známá jako [[CPython]].
Některé programovací jazyky zahrnují funkce standardní knihovny jazyka C ve svých vlastních knihovnách. Knihovny v jiných programovacích jazycích jsou většinou přizpůsobené, aby více vyhovovaly struktuře daného programovacího jazyka, ale funkce a smentika je zachována. Programovací jazyk [[C++]] například zahrnuje funkce standardu knihovny ANSI C, co se týče jména funkcí '''std''' (jako <code>std::printf</code>, <code>std::atoi</code>, <code>std::feof</code>, etc.) a podobná jména hlavičkových souborů ("<code>cstdio</code>", "<code>cmath</code>", "<code>cstdlib</code>", atd.). Dalšími jazyky s podobným přístupem k programování, jako má jazyk C jsou: [[D (programovací jazyk)|programovací jazyk D]] a převládající implementace jazyka [[Python (programovací jazyk)|Python]] známá jako [[CPython]].


== Funkce compileru ==
== Funkce kompilátoru ==


Některé kompilátory, (například [[GNU Compiler Collection|GCC]] přikládá vnořené verze některých funkcí ze standardní knihovny jazyka C, to znamená, že funkce jsou zapsány přímo v kompilovaném objektovém souboru a program je volá namísto funkcí ve sdílené knihovně jazyka C. Vnořené funkce se musí svým chováním respektovat standard ISO C.
Some compilers (for example, [[GNU Compiler Collection|GCC]]<ref>[http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Other-Builtins.html#Other-Builtins Other built-in functions provided by GCC], GCC Manual</ref>) provide built-in versions of many of the functions in the C standard library; that is, the implementations of the functions are written into the compiled [[object file]], and the program calls the built-in versions instead of the functions in the C library [[shared object]] file. This reduces function call overhead, especially if function calls are replaced with [[inline function|inline]] variants, and allows other forms of [[Compiler optimization|optimisation]] (as the compiler knows the [[Control flow|control-flow]] characteristics of the built-in variants), but may cause confusion when debugging (for example, the built-in versions cannot be replaced with [[Instrumentation (computer programming)|instrumented]] variants).

However, the built-in functions must behave like ordinary functions in accordance with ISO C. The main implication is that the program must be able to create a pointer to these functions by taking their address, and invoke the function by means of that pointer. If two pointers to the same function are derived in two different translation unit in the program, these two pointers must compare equal; that is, the address comes by resolving the name of the function, which has external (program-wide) linkage.

== Standardní knihovna POSIX ==
[[POSIX]] (and [[Single Unix Specification|SUS]]) specifies a number of routines that should be available over and above those in the C standard library proper; these are often implemented alongside the C standard library functionality, with varying degrees of closeness. For example, [[glibc]] implements functions such as [[Fork (operating system)|fork]] within libc.so, but before [[NPTL]] was merged into glibc it constituted a separate library with its own linker flag. Often, this POSIX-specified functionality will be regarded as part of the library; the C library proper may be identified as the ANSI or [[International Organization for Standardization| ISO]] C library.


== Implementace ==
== Implementace ==


Unixové systémy mají většinou zabudovanou sdílenou knihovnu jazyka C, ale ne vždy jsou v instalaci obsaženy hlavičkové soubory, takže je znemožněna tvorba aplikací v jazyce C. Knihovna jazyka C je v Unixových systémech považována za součást operačního systému. Funkce jazyka C, včetně těch ze standardu ISO C jsou často používány programy i operačním systémem, tím pádem by systémy s Unixovým jádrem při absenci knihovny jazyka C nefungovaly.
Unix-like systems typically have a C library in [[shared library]] form, but the header files (and compiler toolchain) may be absent from an installation so C development may not be possible. The C library is considered part of the operating system on Unix-like systems. The C functions, including the ISO C standard ones, are widely used by programs, and are regarded as if they were not only an implementation of something in the C language, but also de facto part of the operating system interface. Unix-like operating systems generally cannot function if the C library is erased.

By contrast, on Microsoft Windows, the core system dynamic libraries ([[DLL]]s) do not provide an implementation of the C standard library; this is provided by each compiler individually. Compiled applications written in C are either statically linked with a C library, or linked to a dynamic version of the library that is shipped with these applications, rather than relied upon to be present on the targeted systems. Functions in a compiler's C library are not regarded as interfaces to Microsoft Windows.


Na druhé straně na systémech od společnosti Microsoft Windows jádro dynamických knihoven ([[DLL]]) neobsahuje standardní knihovnu jazyka C a ta je obsažena zvlášť v jednotlivých kompilátorech. Programy vytvořené v programovacím jazyce C jsou buď staticky propojené s knihovnou jazyka C, nebo propojené s dynamickou verzí knihovny distribuovanou přímo s programem.
Many other implementations exist, provided with both various operating systems and C compilers.


Seznam nejznámějších implementací:
Seznam dalsích nejznámějších implementací:


* [[BSD libc]] – implementace pro operační systémy [[Berkeley Software Distribution|BSD]]
* [[BSD libc]] – implementace pro operační systémy [[Berkeley Software Distribution|BSD]]
Řádek 140: Řádek 131:
* [[EGLIBC]] – varianta glibc pro vestavěné systémy
* [[EGLIBC]] – varianta glibc pro vestavěné systémy


== Reference ==
<references />


== Související články ==
== Související články ==

Verze z 10. 9. 2009, 14:54

Standardní hlavičkové soubory

Standardní knihovna jazyka C je v informatice sada standardů pro knihovny a hlavičkové soubory programovacího jazyka C dle normy ISO C. Obsahuje funkce jazyka C zajištující vstup a výstup, práci s textovými řetězci a podobně. Standardní knihovna jazyka C je standardizováné rozhraní jazyka C popsané tímto dokumentem, nejedná se však o programovou knihovnu, jež by byla propojitelná s programy napsanými v jazyce C, knihovna s tímto názvem neexistuje.


Termín knihovna run-time jazyka C se na některých platformách používá pro označení sady základních knihoven, které mají za úkol dynamické propojení s operačním systémem (za i bez podpory hlavičkových souborů). Tohoto označení se také užívá pro knihovny distribuované s kompilátorem jazyka C. Označení run-time se používá pro balíček knihoven a hlavičkových souborů, které jsou potřeba pro úspěšnou činnost kompilátoru. Run-ctime neposkytuje pouze funkce standardní knihovny jazyka C, ale i další součásti potřebné pro fungující program napsaný v jazyce C. Mezi tyto další součástí patří inicializace volání funkce main, či podprogramy nahrazující aritmetické funkce, jěž nejsou obsaženy v CPU a jsou potřebné pro kód generovaný kompilátorem jazyka C.

Historie

Programovací jazyk C, narozdíl od tehdy tradičních jazyků jako byl Cobol a Fortran, před svou standardizací neobsahoval vnořené funkce jako například vstupně/ výstupní operace. To postupem času napravovala uživatelská komunita, vytvářející myšlenku implementace chybějících funkcí a později i jejich stmelení do sady, která se nyní nazývá Standardní knihovna jazyka C. Mnoho z těchto myšlenek se zároveň stalo přímo součástí definice standardu programovacího jazyka C.

Jak Unix, tak i programovací jazyk C vznikaly v laboratořích AT&T's Bell na konci šedesátých a počátku sedmdesátých let. Během semdesátých let nabral programovací jazyk C na popularitě a mnoho universit a vládních i nevládních organizací začalo používat své vlastní variace tohoto jazyka ve svých projektech. Toto na počátku osmdesátých let vyústilo ve zřejmé problémy vzájemné kompatibility těchto rozdílných implementací. V roce 1983 sestavil institut ANSI komisi za účelem vytvoření specifikace standardu dnes známého jako ANSI C. Tato práce v roce 1989 vyvrcholila vznikem standardu C89. Součástí nově vzniklého standardu je i sada softwarových knihoven nazvaná ANSI C standard library (Standardní knihovna ANSI C).

Následující verze standardu jazyka C přinášely do vzniklé knihovny další požadované hlavičkové soubory, ale podpora těchto nových rozšíření se liší v závislosti na jednotlivých implementacích.

Hlavičkové soubory <iso646.h>, <wchar.h> a <wctype.h> byly přidány s prvním rozšířením normy (označováným NA1)v roce 1995.

Následující aktualizace byla provedena v roce 1999 v souvislosti s vydáním standardu C99 a přibyly hlavičkové soubory s názvy: <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> a <tgmath.h>.

Standard ISO

Knihovna standardu ISO C se skládá z 24 hlavičkových souborů jazyka C, pomocí kterých je možné vytvořit program nezávislý na sém okolí. Každý hlavičkový soubor obsahuje jednu, či více deklarací funkcí a definice typů a maker. Hlavičkové soubory standardu ISO C jsou uvedeny v tabulce níže.

V porovnání s jinými jazyky (například Java) je velikost standardní knihovny nepatrná. Knihovna poskytuje zákadní sadu matematických funkcí, funkce pro práci s řetězci a funkce pro souborový a konzolový vstup a výstup. Nezahrnuje ale standardní sadu pro práci s kontejnery, která je obsažena ve standardu knihovny C++, také se nezabývá specifikací grafického uživatelského rozhraní, síťových nástrojů a dalších, které jsou obsaženy například ve standadu programovacího jazyku JAVA. Hlavní výhodou plynoucí z kompaktosti malé standardní knihovny je její jednoduchost a následná snadná přenositelnost na nové platformy.

V průběhu času bylo vydáno několik knihoven, které přidávají stejné funkce jako standardní knihovny jiných jazyků. Mezi nejznámějsí knihovny paří projekt GNOME, který vytvořil soubor grafických nástrojů GTK+ a GLib. Jejich nevýhoda samozřejmě spočívá v tom, že spolu jednotlivé nestandardní knihovny vzájemně nespolupracují a programátoři se většinou musí učit pracovat s novýi sadami instrukcí.

Standard ISO C hlaviček knihoven

<assert.h> Obsahuje makra pro práci s chybami, která se používají při detekci a odlaďování chyb.
<complex.h> Soubr fukcí, určený pro práci s komplexními čísly. (Nově s C99)
<ctype.h> Obsahuje funkce pro rozzlišení velkých a malých písmen a jejich vzájemným převodem bez závislosti na použité znakové sadě (většinou se využívá sady ASCII či jejích nástaveb, i když je možné i použití sady EBCDIC.
<errno.h> Testování chybových kódů hlášených funkcemi knihoven.
<fenv.h> Práce v prostředí s plovoucí desetinnou čárkou. (Nově s C99)
<float.h> Obsahuje definici konstant určených pro práci s knihovnou pro výpočty s plovoucí desetinou čárkou. Obsahuje funkce pro výpočet minimálního vzdálenosti dvou čísel s plovoucí desetinnou čárkou (_EPSILON), výpočet maximální přsnosti s použitou desetinnou přesností (_DIG) a funkce pracující s rozsahem použitých číslic (_MIN, _MAX).
<inttypes.h> Pro přesné převody mezi typy integer. (Nově s C99)
<iso646.h> Pro programování pomocí znakové sady ISO 646. (Nově s NA1)
<limits.h> Obsahuhe předdefinované konstanty a vlastnosti typů integer, jako je rozsah čísel, který se může zobrazit (_MIN, _MAX).
<locale.h> Pro setlocale() a konstanty s ní související. Tato funkce se používá pro výběr potřebné lokalizace.
<math.h> Výpočty s běžnými matematickými funkcemi.
<setjmp.h> Deklaruje makra setjmp a longjmp, která se používají pro práci vnějšími proměnnými
<signal.h> Knihovna pro reakce při náročných situacích
<stdarg.h> Přístup k argumentům předaným funkcím.
<stdbool.h> Datový typ boolean. (Nově s C99)
<stdint.h> Definice dalších typů integer. (Nově s C99)
<stddef.h> Několik užitečných datových typů a maker.
<stdio.h> Podpora vstupů a výstupů jádra programovacího jazyka C. Tento soubor obsahuje "posvátnou" funkci printf.
<stdlib.h> Pro práci s rozličnými operacemi mezi které patří: generátor pseudonáhodných čísel, rozdělování paměti, kontrola procesů, vyhledávání a třídění.
<string.h> Pro práci s různými druhy řetězců.
<tgmath.h> Pro matematické funkce pro práci s obecnými datovými typy. (Nově s C99)
<time.h> Pro konverzi mezi různými formáty data a času.
<wchar.h> Pro práci s různými druhy znaků, je potřebná pro programy v jiných jazycích. (Nově s NA1)
<wctype.h> Pro klasifikaci širokého spektra znaků. (Nově s NA1)

Standardní knihovna jazyka C v jiných jazycích

Některé programovací jazyky zahrnují funkce standardní knihovny jazyka C ve svých vlastních knihovnách. Knihovny v jiných programovacích jazycích jsou většinou přizpůsobené, aby více vyhovovaly struktuře daného programovacího jazyka, ale funkce a smentika je zachována. Programovací jazyk C++ například zahrnuje funkce standardu knihovny ANSI C, co se týče jména funkcí std (jako std::printf, std::atoi, std::feof, etc.) a podobná jména hlavičkových souborů ("cstdio", "cmath", "cstdlib", atd.). Dalšími jazyky s podobným přístupem k programování, jako má jazyk C jsou: programovací jazyk D a převládající implementace jazyka Python známá jako CPython.

Funkce kompilátoru

Některé kompilátory, (například GCC přikládá vnořené verze některých funkcí ze standardní knihovny jazyka C, to znamená, že funkce jsou zapsány přímo v kompilovaném objektovém souboru a program je volá namísto funkcí ve sdílené knihovně jazyka C. Vnořené funkce se musí svým chováním respektovat standard ISO C.

Implementace

Unixové systémy mají většinou zabudovanou sdílenou knihovnu jazyka C, ale ne vždy jsou v instalaci obsaženy hlavičkové soubory, takže je znemožněna tvorba aplikací v jazyce C. Knihovna jazyka C je v Unixových systémech považována za součást operačního systému. Funkce jazyka C, včetně těch ze standardu ISO C jsou často používány programy i operačním systémem, tím pádem by systémy s Unixovým jádrem při absenci knihovny jazyka C nefungovaly.

Na druhé straně na systémech od společnosti Microsoft Windows jádro dynamických knihoven (DLL) neobsahuje standardní knihovnu jazyka C a ta je obsažena zvlášť v jednotlivých kompilátorech. Programy vytvořené v programovacím jazyce C jsou buď staticky propojené s knihovnou jazyka C, nebo propojené s dynamickou verzí knihovny distribuovanou přímo s programem.

Seznam dalsích nejznámějších implementací:


Související články

V tomto článku byl použit překlad textu z článku C standard library na anglické Wikipedii.