Timeline
Chat
Prospettiva
Libreria standard del C
libreria standard per il linguaggio C Da Wikipedia, l'enciclopedia libera
Remove ads
La libreria standard del C è un insieme di librerie che forniscono al programmatore funzioni tipizzate. Insieme alla libreria vengono inoltre forniti gli Header file, file di testo che permettono al programmatore di utilizzare lo specifico insieme di funzioni della libreria ad esse associate.[1]
Remove ads
Storia
Riepilogo
Prospettiva
Il Linguaggio C è nato come sostegno allo sviluppo del sistema UNIX, implementato su determinate macchine tipizzate. Con l'evoluzione dell'architettura delle macchine e dal bisogno di un linguaggio universale, nacque l'esigenza di scrivere un codice portabile che permettesse l'evolversi del linguaggio a seconda delle necessità.[2]
L'American National Standards Institute nel 1983 creò il comitato ANSI X3J11 al fine di dare "una definizione del linguaggio C non ambigua e non dipendente dalla macchina" [3] che culminò nel 1989 con la pubblicazione dello standard C89, parte del quale consisteva in un set di librerie chiamato librerie standard del C . Questo venne riconosciuto internazionalmente come ANSI C o ANSI/ISO C, dopo che, nel 1990, venne approvato dall'International Standardization Organization. Ad oggi questo standard è usato alla base di tutti i compilatori C. Le formalizzazioni di maggior rilievo introdotte dallo standard furono una nuova forma di definizione e dichiarazione di funzione e l'introduzione della libreria standard del C, che introdusse per la prima volta fondamentali elementi del linguaggio ad oggi conosciuto, ad esempio, l'Input/Output, la gestione degli errori e la tipizzazione dei caratteri.[3]
Nel 1995, la ISO introdusse la Normative Amendment 1, abbreviando AM1, formalmente riconosciuta ISO/IEC 9899/AMD1:1995. Il progetto AM1 si concentrò principalmente sull'ampliamento della libreria standard introducendo nuovi header.
Nel 1999, l'ANSI pubblicò la revisione dello standard C89, il C99, adottato nel 2000 e conosciuto formalmente come ISO/IEC 9899:1999. Lo standard C99 prevede l'aggiunta di Header ed il miglioramento di funzioni e librerie, in particolare <math.h>.
Successivamente al C99 furono pubblicati altri due standard, sempre più specifici con il fine di supportare al meglio il lavoro del compilatore e del linker.
Il C11, adottato nel 2011, standardizza il modello della memoria per supportare al meglio la programmazione multi thread.[4]
Il C18, ultimo standard del 2018, non introduce nuove caratteristiche ma è mirato a risolvere difetti dello standard precedente.[4]
Il fine ultimo dello standard è quella di promuovere la portabilità, affidabilità, manutenibilità ed efficienza dei programmi in C sulla grande varietà di macchine.
Remove ads
Design
Riepilogo
Prospettiva
Il nome e le caratteristiche di ogni funzione sono incluse in un file chiamato header file ma l'implementazione vera e propria delle funzioni è in un file di libreria separato. Essendo già presente la libreria nei compilatori, non è necessario allegarla al progetto in cui questa viene utilizzata, è però necessario includere attraverso la direttiva #include
, le funzioni della libreria che si usano nel file, con qualsiasi ordine.[3]
I nomi e gli obiettivi degli header sono diventati comuni ma l'organizzazione delle librerie rimane non uniforme tra i vari compilatori. La libreria standard è solitamente inclusa con il compilatore. Dato che i compilatori C spesso forniscono funzionalità extra che non sono specificate nel C ANSI, una libreria standard con un particolare compilatore è spesso incompatibile con librerie standard di altri compilatori.
Gran parte della libreria standard del C ha dimostrato di essere costruita bene. Qualche parte, con il senno di poi, è vista come mal costruita. La funzione di input gets()
(e l'uso di scanf()
per leggere input di stringhe) è fonte di molti buffer overflow, e la maggior parte delle guide di programmazione raccomandano di non farne uso. Un'altra stranezza è strtok()
, una funzione che è costruita come un primitivo analizzatore lessicale ma è molto "fragile" e difficile da usare.
Remove ads
Standard ANSI
Riepilogo
Prospettiva
La libreria C ANSI standard consiste in 24 header file C, 15 da C89 e 9 da C99, che possono essere inclusi nel progetto di un programmatore con una singola direttiva. Ogni header consiste in una o più dichiarazioni di funzioni, definizioni di tipi e macro. Il contenuto di questi header file si può trovare più avanti.
Rispetto ad altri linguaggi (per esempio il Java) la libreria standard è molto piccola. Questa dispone di un set base di funzioni matematiche, funzioni per la manipolazione di stringhe, conversione di tipi e I/O da file e da console. Non contiene un set standard di "contenitori di tipi" come la libreria standard dei template del C++, non dispone nemmeno di tool per creare interfacce grafiche per utenti (GUI), strumenti per la rete e molte altre funzionalità di cui dispone il Java. Il vantaggio principale di una libreria piccola e che è più facile fornire un ambiente ANSI C funzionante rispetto ad altri linguaggi, e conseguentemente è relativamente facile fare porting verso altre piattaforme.
Molte altre librerie sono state sviluppate per fornire le funzionalità equivalenti a quelle fornite da altri linguaggi nelle loro librerie standard. Per esempio, il progetto di ambiente desktop GNOME ha permesso di sviluppare il tool grafico GTK+ e la GLib, una libreria contenente strutture dati, e ci sono molti altri esempi conosciuti. La varietà di librerie disponibili è spiegabile con il fatto che alcune librerie, migliori di altre, hanno dimostrato la propria superiorità con il passare del tempo. Il problema principale è che spesso diverse librerie non funzionano bene insieme e i programmatori che sono pratici con alcuni set di librerie potrebbero trovarne set diversi su differenti piattaforme.
Una particolarità della Libreria Standard del C è che, dovendo includere più header, non importa l'ordine con cui questi vengono posti, a meno che la libreria assert.h sia la prima, essendo questa a gestire gli errori.
Libreria degli header file del C ANSI
Remove ads
La libreria standard del C nel C++
Il C++ include le funzionalità della libreria standard del C ANSI, ma apporta numerose modifiche, come la modifica del nome degli header file da <xxx.h> a <cxxx> (i nomi nello stile C sono ancora disponibili, ma sono considerati obsoleti) oppure l'inserimento di tutti gli identificatori nello spazio dei nomi (namespace) std
.
Remove ads
Librerie comuni di supporto
Riepilogo
Prospettiva
Nonostante questo comportamento non sia standardizzato, i programmi C potrebbero dipendere da una libreria di funzioni di runtime che contengono del codice che il compilatore usa al momento dell'esecuzione. Il codice che inizializza il processo per il sistema operativo prima della chiamata del main()
, ad esempio, è implementato nella Libreria di Runtime del C di ogni specifico compilatore. Il codice della libreria di runtime potrebbe essere utile per eventuali future implementazioni del linguaggio, come ad esempio la gestione delle eccezioni o l'implementazione di codice in virgola mobile.
La libreria standard del C documenta soltanto che le specifiche funzioni menzionate in questo articolo sono disponibili e come si comportano. Poiché l'implementazione del compilatore potrebbe dipendere dalle funzioni addizionali presenti nella libreria di runtime, capita spesso che le routine specifiche del produttore siano aggiunte negli stessi moduli della libreria standard, dato che è molto probabile che un programma creato con questo compilatore necessiti di entrambe le cose.
Nonostante la confusione causata da questa aggiunta, la libreria di runtime del C non è una parte standardizzata del linguaggio e dipende dal produttore.
Remove ads
Note
Bibliografia
Voci correlate
Altri progetti
Collegamenti esterni
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads