# Biblioteca estàndard C

La biblioteca estàndard C o libc és la biblioteca estàndard per al llenguatge de programació C, tal com s'especifica a l'estàndard ISO C. A partir de l'estàndard ANSI C original, es va desenvolupar al mateix temps que l'especificació POSIX de la biblioteca C, que n'és un superconjunt. Com que l'ANSI C va ser adoptat per l'Organització Internacional per a l'Estandardització, la biblioteca estàndard C també s'anomena biblioteca C ISO.
La biblioteca estàndard C proporciona macros, definicions de tipus i funcions per a tasques com ara el maneig de cadenes, càlculs matemàtics, processament d'entrada/sortida, gestió de memòria i diversos altres serveis del sistema operatiu.

## Interfície de programació d'aplicacions (API)
### Fitxers de capçalera

La interfície de programació d'aplicacions (API) de la biblioteca estàndard C es declara en una sèrie de fitxers de capçalera. Cada fitxer de capçalera conté una o més declaracions de funció, definicions de tipus de dades i macros.
Després d'un llarg període d'estabilitat, es van afegir tres nous fitxers de capçalera (iso646.h, wchar.h i wctype.h ) amb l'Addendum Normatiu 1 (NA1), una addició a l'estàndard C ratificat el 1995. Sis fitxers de capçalera més (complex.h, fenv.h, inttypes.h, stdbool.h, stdint.h i tgmath.h) es van afegir amb C99, una revisió de l'estàndard C publicada el 1999, i cinc fitxers més (stdalign.h, stdatomic.h, stdnoreturn.h, threads.h i uchar.h) amb C11 el 2011. En total, ara hi ha 29 fitxers de capçalera.

## Implementacions

Els sistemes semblants a Unix solen tenir una biblioteca C en forma de biblioteca compartida, però els fitxers de capçalera (i la cadena d'eines del compilador) poden estar absents d'una instal·lació, de manera que el desenvolupament en C pot no ser possible. La biblioteca C es considera part del sistema operatiu en sistemes semblants a Unix; a més de les funcions especificades per l'estàndard C, inclou altres funcions que formen part de l'API del sistema operatiu, com ara funcions especificades a l'estàndard POSIX. Les funcions de la biblioteca C, incloses les de l'estàndard ISO C, són àmpliament utilitzades pels programes, i es consideren com si no només fossin una implementació d'alguna cosa en el llenguatge C, sinó també part de facto de la interfície del sistema operatiu. Els sistemes operatius semblants a Unix generalment no poden funcionar si s'esborra la biblioteca C. Això és cert per a les aplicacions que estan enllaçades de manera dinàmica i no estàticament. A més, el propi nucli (almenys en el cas de Linux) funciona independentment de qualsevol biblioteca.
A Microsoft Windows, les biblioteques dinàmiques del sistema central (DLL) proporcionen una implementació de la biblioteca estàndard C per al compilador Microsoft Visual C++ v6.0; la biblioteca estàndard C per a les versions més noves de Microsoft Visual Cada compilador proporciona el compilador C++ individualment, així com els paquets redistribuibles. Les aplicacions compilades escrites en C estan enllaçades estàticament amb una biblioteca C o enllaçades amb una versió dinàmica de la biblioteca que s'envia amb aquestes aplicacions, en lloc de confiar-se que estiguin presents als sistemes de destinació. Les funcions de la biblioteca C d'un compilador no es consideren interfícies per a Microsoft Windows.
Existeixen moltes implementacions de biblioteques C, proveïdes amb diversos sistemes operatius i compiladors C. Algunes de les implementacions populars són les següents:
* La libc BSD, diverses implementacions distribuïdes amb sistemes operatius derivats de BSD.
* Biblioteca GNU C (glibc), utilitzada a GNU Hurd, GNU/kFreeBSD i Linux.
* Biblioteca en temps d'execució de Microsoft C, part de Microsoft Visual C++. Hi ha dues versions de la biblioteca: MSVCRT que era redistribuible fins a la v12 / Visual Studio 2013 amb baix compliment de C99, i una de nova UCRT (Universal C Run Time) que forma part de Windows 10 i 11, així que sempre present per enllaçar contra, i també és compatible amb C99 .
* dietlibc, una petita implementació alternativa de la biblioteca estàndard C (menys MMU).
* μClibc, una biblioteca estàndard C per a sistemes μClinux incrustats (menys MMU).
** uclibc-ng, una biblioteca C incrustada, forquilla de μClibc, encara es manté, amb suport per a la unitat de gestió de memòria (MMU).
* Newlib, una biblioteca estàndard C per a sistemes incrustats (sense MMU) i utilitzada a la distribució Cygwin GNU per a Windows.
* klibc, principalment per arrencar sistemes Linux.
* musl, una altra implementació lleugera de biblioteca estàndard C per a sistemes Linux.
* Bionic, desenvolupat originalment per Google per al sistema operatiu del sistema incrustat Android, derivat de BSD libc.
* picolibc, desenvolupat per Keith Packard, orientat a petits sistemes incrustats amb memòria RAM limitada, basat en codi de Newlib i AVR Libc

## Normalització

El llenguatge C original no proporcionava funcions integrades com ara operacions d'E/S, a diferència dels llenguatges tradicionals com COBOL i Fortran. Amb el temps, les comunitats d'usuaris de C van compartir idees i implementacions del que ara s'anomena biblioteques estàndard de C. Moltes d'aquestes idees es van incorporar finalment a la definició del llenguatge C estandarditzat.
Tant Unix com C es van crear als laboratoris Bell d'AT&T a finals dels anys 60 i principis dels 70. Durant la dècada de 1970 el llenguatge C es va fer cada cop més popular. Moltes universitats i organitzacions van començar a crear les seves pròpies variants de la llengua per als seus propis projectes. A principis de la dècada de 1980 es van fer evidents problemes de compatibilitat entre les diferents implementacions de C. El 1983 l'American National Standards Institute (ANSI) va formar un comitè per establir una especificació estàndard de C coneguda com "ANSI C". Aquest treball va culminar amb la creació de l'anomenat estàndard C89 l'any 1989. Part de l'estàndard resultant va ser un conjunt de biblioteques de programari anomenades biblioteca estàndard ANSI C.

## Referències

* ↑ «The GNU C Library – Introduction» (en anglès). gnu.org. [Consulta: 5 desembre 2013].
* ↑ «Difference between C standard library and C POSIX library» (en anglès). stackoverflow.com. [Consulta: 4 març 2015].
* ↑ «C Standards» (en anglès americà). C: C Standards. Keil. [Consulta: 24 novembre 2011].
* ↑ «C Standard Library header files - cppreference.com» (en anglès). [Consulta: 11 desembre 2023].