Biblioteca standard a C

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Biblioteca standard C ++
Biblioteca standard a C

Biblioteca Standard C este un set de biblioteci care oferă programatorului funcții tastate. Împreună cu biblioteca sunt furnizate și fișiere Header , fișiere text care permit programatorului să utilizeze setul specific de funcții de bibliotecă asociate acestora. [1]

Istorie

Pictogramă lupă mgx2.svg Același subiect în detaliu: Limbajul C.

Limbajul C s-a născut ca un suport pentru dezvoltarea sistemului UNIX, implementat pe anumite mașini tipizate. Odată cu evoluția arhitecturii mașinilor și nevoia unui limbaj universal, a apărut nevoia de a scrie un cod portabil care să permită limbajului să evolueze după cum este necesar. [2]

Institutul Național de Standardizare American în 1983 a creat comitetul ANSI X3J11 pentru a oferi „o definiție a limbajului C” fără echivoc și dependentă de mașină [3], care a culminat în 1989 cu publicarea standardului C89 , o parte din care a constat dintr-un set de biblioteci numite biblioteci standard C. Aceasta a fost recunoscută la nivel internațional ca ANSI C sau ANSI / ISO C, după ce a fost aprobată de Organizația Internațională de Standardizare în 1990 . Până în prezent, acest standard este utilizat ca bază a tuturor compilatoarelor C. Cele mai importante formalizări introduse de standard au fost o nouă formă de definire și declarare a funcției și introducerea bibliotecii standard C, care a introdus elemente fundamentale pentru prima dată. limba cunoscută astăzi, de exemplu, Intrare / Ieșire, gestionarea erorilor și tastarea caracterelor. [3]

În 1995 , ISO a introdus amendamentul normativ 1, prescurtând AM1, recunoscut oficial ISO / IEC 9899 / AMD1: 1995. Proiectul AM1 s-a axat în principal pe extinderea bibliotecii standard prin introducerea de noi antete.

În 1999 , ANSI a publicat revizuirea standardului C89, C99, adoptat în 2000 și cunoscut oficial sub numele de ISO / IEC 9899: 1999. Standardul C99 prevede adăugarea de antete și îmbunătățirea funcțiilor și a bibliotecilor, în special <math.h>.

După C99, au fost publicate alte două standarde, din ce în ce mai specifice, pentru a sprijini mai bine munca compilatorului și a linkerului .

C11, adoptat în 2011 , standardizează modelul de memorie pentru a sprijini mai bine programarea multi- thread . [4]

C18, cel mai recent standard din 2018 , nu introduce noi caracteristici, dar are drept scop rezolvarea defectelor standardului anterior. [4]

Scopul final al standardului este de a promova portabilitatea , fiabilitatea , mentenabilitatea și eficiența programelor C pe o mare varietate de mașini.

Proiecta

Numele și caracteristicile fiecărei funcții sunt incluse într-un fișier numit fișier antet, dar implementarea efectivă a funcțiilor se află într-un fișier de bibliotecă separat. Deoarece biblioteca este deja prezentă în compilatoare, nu este necesar să o atașați la proiectul în care este utilizată, dar este necesar să includeți prin directiva #include , funcțiile bibliotecii care sunt utilizate în fișier, in orice ordine. [3]

Numele anteturilor și țintele au devenit obișnuite, dar organizarea bibliotecii rămâne inconsecventă între compilatoare. Biblioteca standard este de obicei inclusă cu compilatorul . Deoarece compilatoarele C oferă adesea funcționalități suplimentare care nu sunt specificate în ANSI C, o bibliotecă standard cu un anumit compilator este adesea incompatibilă cu bibliotecile standard ale altor compilatoare.

O mare parte din biblioteca C standard s-a dovedit a fi bine construită. Unele părți, cu retrospectivă, sunt văzute ca fiind prost construite. Funcția de intrare gets() (și utilizarea scanf() pentru a citi intrările șirului) provoacă multe depășiri de tampon , iar majoritatea ghidurilor de programare recomandă să nu le utilizați. O altă ciudățenie este strtok() , o funcție care este construită ca un parser lexical primitiv , dar care este foarte „slabă” și dificil de utilizat.

Standard ANSI

Biblioteca standard ANSI C este formată din fișiere de antet 24 C, 15 din C89 și 9 din C99, care pot fi incluse în proiectul unui programator cu o singură directivă. Fiecare antet constă din una sau mai multe declarații de funcții, definiții de tip și macrocomenzi. Conținutul acestor fișiere antet poate fi găsit mai jos.

În comparație cu alte limbi (de exemplu Java ) biblioteca standard este foarte mică. Acesta are un set de bază de funcții matematice, manipulare șiruri, conversie tip și funcții I / O de fișiere și console. Nu conține un set standard de "containere de tip", cum ar fi biblioteca standard de șabloane C ++, nici măcar nu are instrumente pentru crearea de interfețe grafice de utilizator ( GUI ), instrumente de rețea și multe alte caracteristici pe care le are Java. Principalul avantaj al unei biblioteci mici este că este mai ușor să oferiți un mediu ANSI C de lucru decât alte limbi și, prin urmare, este relativ ușor de portat pe alte platforme.

Multe alte biblioteci au fost dezvoltate pentru a oferi o funcționalitate echivalentă cu cea oferită de alte limbi în bibliotecile lor standard. De exemplu, proiectul de mediu desktop GNOME a făcut posibilă dezvoltarea instrumentului grafic GTK + și GLib , o bibliotecă care conține structuri de date și există multe alte exemple cunoscute. Varietatea bibliotecilor disponibile poate fi explicată prin faptul că unele biblioteci, mai bune decât altele, și-au dovedit superioritatea în timp. Principala problemă este că adesea diferite biblioteci nu funcționează bine împreună și programatorii care sunt familiarizați cu anumite seturi de biblioteci pot găsi seturi diferite pe platforme diferite.

O particularitate a Bibliotecii Standard C este că, trebuind să includă mai multe anteturi, ordinea în care sunt plasate nu contează, cu excepția cazului în care biblioteca assert.h este prima, deoarece gestionează erori.

Biblioteca de fișiere antet ANSI C.

Nume Descriere
< assert.h > Conține macrocomanda asertă , utilizată pentru identificarea erorilor logice și a altor tipuri de erori în versiunile de depanare ale unui program.
< complex.h > Un grup de funcții utilizate pentru manipularea numerelor complexe . (Adăugat cu C99 )
< ctype.h > Acest fișier antet conține funcții utilizate pentru a clasifica caracterele în funcție de tipurile lor sau pentru a le converti de la majuscule la minuscule, indiferent de setul de caractere utilizat (de obicei ASCII , dar există și implementări care utilizează EBCDIC ).
< errno.h > Pentru a testa codurile de eroare returnate de funcțiile bibliotecii.
< fenv.h > Pentru a verifica mediul în virgulă mobilă . (Adăugat cu C99 )
< float.h > Conține constante definite care indică proprietățile specifice implementării bibliotecii în virgulă mobilă , cum ar fi diferența minimă între două numere în virgulă mobilă (_EPSILON), numărul maxim de cifre semnificative (_DIG) și gama de numere care pot fi reprezentate (_MIN, _MAX).
< inttypes.h > Pentru a face conversii precise între tipurile întregi. (Adăugat cu C99 )
< iso646.h > Pentru a programa în setul de caractere ISO 646 . (Adăugat cu NA1 )
< limits.h > Conține constante definite care indică proprietăți specifice implementării tipurilor întregi, cum ar fi intervalul numerelor reprezentabile (_MIN, _MAX).
< local.h > Pentru setlocale () și constante relative. Folosit pentru a alege codul local adecvat.
< math.h > Pentru funcții matematice comune.
< setjmp.h > Declara setjmp / longjmp , folosit pentru salturi nelocale .
< signal.h > Pentru a controla diferite condiții excepționale.
< stdarg.h > Folosit de funcții care iau un număr variabil de parametri.
< stdbool.h > Pentru un tip de date boolean. (Adăugat cu C99 )
< stdint.h > Pentru a defini diferite tipuri întregi. (Adăugat cu C99 )
< stddef.h > Pentru a defini diferite tipuri și macro-uri utile.
< stdio.h > Oferă funcționalități de intrare / ieșire de bază C. Acest fișier include prototipul venerabilelor funcții printf și scanf .
< stdlib.h > Pentru a efectua un număr mare de operații, inclusiv conversii, generare de numere pseudo-aleatorii , alocarea memoriei, controlul procesului, variabile de mediu, semnale, căutare și sortare.
< string.h > Pentru a manipula șirurile.
< tgmath.h > Pentru funcții matematice generice. (Adăugat cu C99 )
< time.h > Pentru a converti între diferite formate de dată și oră.
< wchar.h > Pentru a manipula fluxuri sau șiruri care conțin caractere extinse - esențiale pentru susținerea unei game largi de limbi cu caractere non-occidentale. (Adăugat cu NA1 )
< wctype.h > Pentru clasificarea caracterelor extinse. (Adăugat cu NA1 )

Biblioteca standard C în C ++

C ++ include caracteristicile bibliotecii standard ANSI C, dar face numeroase modificări, cum ar fi schimbarea numelui fișierelor antet din <xxx.h> în <cxxx> (numele în stil C sunt încă disponibile, dar sunt considerate învechite ) sau inserarea tuturor identificatorilor în spațiul de nume std .

Biblioteci de sprijin comune

Deși acest comportament nu este standardizat, programele C pot depinde de o bibliotecă de funcții de runtime care conțin cod pe care compilatorul îl folosește la runtime . Codul care inițializează procesul pentru sistemul de operare înainte de a apela main() , de exemplu, este implementat în Biblioteca Runtime C a fiecărui compilator specific. Codul bibliotecii de execuție ar putea fi util pentru orice implementări viitoare ale limbajului, cum ar fi gestionarea excepțiilor sau implementarea codului în virgulă mobilă .

Biblioteca standard C documentează numai funcțiile specifice menționate în acest articol sunt disponibile și cum se comportă. Deoarece implementarea compilatorului poate depinde de funcții suplimentare din biblioteca de runtime, se întâmplă adesea ca rutinele specifice producătorului să fie adăugate în aceleași module ca și biblioteca standard, deoarece este foarte probabil ca un program creat cu acest compilator să aibă nevoie de ambele. acest.

În ciuda confuziei cauzate de această adăugare, biblioteca de rulare C nu este o parte standardizată a limbii și depinde de producător.

Notă

  1. ^ Al Kelley și Ira Pohl, C: predare și programare , Addison-Wesley Italia, 2004, p. 569, ISBN 9788871922195 . Adus la 8 mai 2019 .
  2. ^ Fabrizio Ciacchi, Istoria limbajului C | Ghidul C | Programare HTML.it , pe HTML.it. Adus la 8 mai 2019 .
  3. ^ a b c Kernighan, Brian W., Limbajul C: principii de programare și manual de referință , 2. ed, Pearson Education Italia, 2004, p. XI, ISBN 887192200X ,OCLC 849448796 . Adus la 8 mai 2019 .
  4. ^ a b Standardul - C , pe www.iso-9899.info . Adus la 8 mai 2019 .

Bibliografie

  • Brian W. Kernighan, Limbajul C. Principiile de programare și manualul de referință , Pearson, 2004.
  • Kelley Al, C-Didactics and Programming , Pearson.

Elemente conexe

Alte proiecte

linkuri externe