C (linguaggio di programmazione)
C (AFI: /ˈsiː/) è un linguaggio di programmazione a uso generale di natura imperativa e procedurale creato da Dennis Ritchie negli anni 1970. Tutt'oggi influente, è largamente adoperato nei sistemi operativi, nei driver e nelle pile di protocolli, mentre è in diminuzione il suo uso nelle…
C (AFI: /ˈsiː/) è un linguaggio di programmazione a uso generale di natura imperativa e procedurale creato da Dennis Ritchie negli anni 1970. Tutt'oggi influente, è largamente adoperato nei sistemi operativi, nei driver e nelle pile di protocolli, mentre è in diminuzione il suo uso nelle applicazioni. C è comunemente usato in architetture che vanno dai più grandi supercalcolatori fino ai minuscoli microcontrollori e sistemi integrati.
Successore del linguaggio B, C fu in origine sviluppato ai Bell Labs da Ritchie tra il 1972 e il 1978 per costruire utilità eseguibili su Unix, e fu subito dopo applicato nella reimplementazione del kernel di quel sistema operativo. Durante gli anni 1980, C gradualmente crebbe in popolarità, diventando nel terzo millennio uno dei linguaggi più usati in assoluto, con compilatori disponibili per praticamente ogni architettura e sistema operativo moderni. Il libro intitolato The C Programming Language, scritto dal suo creatore insieme a Brian Kernighan, servì per molti anni come lo standard de facto del linguaggio. Dal 1976, C è normato dall'American National Standards Institute (ANSI) e dall'International Organization for Standardization (ISO).
C è un linguaggio procedurale imperativo, che supporta la programmazione strutturata, la visibilità lessicale e la ricorsione, e possiede un sistema di tipi statico. Il linguaggio C permette l'utilizzo a basso livello alla memoria e fornisce costrutti che combaciano efficientemente con le istruzioni del linguaggio macchina. Nonostante le sue capacità a basso livello, il linguaggio è adatto per essere programmato su piattaforme diverse: un programma in C conforme scritto per essere portabile può essere compilato per una vasta gamma di piattaforme con poche variazioni al suo codice sorgente.
A partire dal 2000, C è costantemente classificato tra i primi due linguaggi nell'indice TIOBE, una misura di popolarità dei linguaggi di programmazione.
Storia
Il linguaggio fu originariamente sviluppato da Dennis Ritchie presso i Bell Labs della AT&T tra il 1969 e il 1973, con lo scopo di utilizzarlo per la stesura del sistema operativo UNIX, precedentemente realizzato da Ken Thompson e Ritchie stesso in assembly del PDP-7. Nel 1972 esordì il primo sistema UNIX su un DEC PDP-11, scritto interamente col nuovo linguaggio di programmazione C. Nel 1978, la pubblicazione del libro Il linguaggio C ne fece crescere rapidamente la diffusione, portando alla nascita di diversi dialetti e dunque alla necessità di definire uno standard.
La prima standardizzazione di C fu realizzata dall'ANSI nel 1989 (ANSI X3.159-1989), nota come C89. La stessa versione, solo con modifiche di formattazione minime, fu poi standardizzata anche dall'ISO nel 1990 (ISO/IEC 9899:1990), nota come C90. Successivamente l'ISO ha pubblicato altre quattro versioni del linguaggio C, note come C95 (ISO/IEC 9899/AMD1:1995), C99 (ISO/IEC 9899:1999), C11 (ISO/IEC 9899:2011/Cor 1:2012) e C18 (ISO/IEC 9899:2018). Di queste, la C99 ha portato i principali miglioramenti al linguaggio di programmazione, introducendo nuovi tipi di dato, gli inizializzatori designati per gli array, gli array di dimensione variabile e altri miglioramenti mutuati da C++.
C99
Il tipo di dato _Bool, che ammette la memorizzazione dei booleani false e true;
Il tipo di dato _Complex per la rappresentazione dei numeri complessi;
Il tipo di dato _Imaginary per la rappresentazione dei numeri immaginari;
Il tipo di dato long long int;
Il tipo booleano in <stdbool.h>;
Le funzionalità addizionali floating-point in <float.h>;
I commenti su linea singola introdotti da //;
Le funzioni inline;
Il qualificatore di tipo restrict, ammissibile solo sui puntatori (restricted pointer);
È rimosso l'int implicito di ritorno;
La lunghezza variabile dell'array (VLA, variable-length array);
I letterali composti (Compound literals);
Gli inizializzatori designati (Designated initializers)
È ammesso dichiarare variabili ovunque si desidera nell'ambito di un blocco di codice così come frapporre tra di esse altre istruzioni;
Le funzioni della famiglia vscanf;
Le regole per le costanti di tipo intero;
Le regole di promozione degli interi (integer promotion);
Le macro matematiche di tipo generico in <tgmath.h>;
Le macro con un numero variabile di argomenti;
La macro va_copy;
Lo specificatore di conversione %lf nella funzione printf();
Il supporto all'aritmetica IEEE Floating-Point (IEC 559);
L'operatore di preprocessing _Pragma.
MCMX


