C (linguaggio di programmazione): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
-U
Etichette: Modifica da mobile Modifica da applicazione mobile Modifica da applicazione Android
amplio incipit
Riga 2:
|nome = C
|immagine = The C Programming Language logo.svg
|didascalia = GraficaLogo dellapresente nella copertina inglese di ''[[Il linguaggio C]]'':, ilmanuale designerscritto originaledal creatore di C [[Dennis Ritchie]] èe coautoreda del[[Brian libroKernighan]]<ref>{{Cita libro|urlname=https:"prinz"//books.google.com/books?id=4Mfe4sAMFUYC|titolo=C in a Nutshell|cognome=Prinz|nome=Peter|cognome2=Crawford|nome2=Tony|data=16 dicembre 2005|editore=O'Reilly Media, Inc.|isbn=9780596550714|p=3|lingua=en}}</ref>
|autore = [[Dennis Ritchie]]
|data = 1972
Riga 15:
}}
 
'''C''' è un [[linguaggio di programmazione]] ad uso generale di natura [[Programmazione imperativa|imperativa]] e [[Programmazione procedurale|procedurale]] creato da [[Dennis Ritchie]] negli anni '70. Tutt'oggi influente, è largamente adoperato nei [[Sistema operativo|sistemi operativi]], nei ''[[driver]]'' e nelle [[Pila di protocolli|pile di protocolli]], mentre è in diminuzione il suo uso nelle [[Applicazione (informatica)|applicazioni]].<ref>{{cite web |date=9 agosto 2016 |title=C Language Drops to Lowest Popularity Rating |url=https://www.developer.com/news/c-language-drops-to-lowest-popularity-rating/ |url-status=live |archive-url=https://web.archive.org/web/20220822225609/https://www.developer.com/news/c-language-drops-to-lowest-popularity-rating/|access-date=2022-08-01|language=en}}</ref> C è comunemente usato in architetture che vanno dai più grandi [[Supercomputer|supercalcolatori]] fino ai minuscoli [[Microcontrollore|microcontrollori]] e [[Sistema embedded|sistemi integrati]].
'''C''' è un [[linguaggio di programmazione]] [[Programmazione imperativa|imperativo]] di natura [[Programmazione procedurale|procedurale]]; i [[programma (informatica)|programmi]] scritti in questo linguaggio sono composti da espressioni matematiche e da [[Istruzione (informatica)|istruzioni]] imperative raggruppate in procedure parametrizzate in grado di manipolare vari [[tipo di dato|tipi di dati]].
 
Successore del linguaggio [[B (linguaggio di programmazione)|B]], C fu in origine sviluppato ai [[Bell Labs]] da Ritchie tra il 1972 e il 1973 per costruire [[Utility (informatica)|utilità]] eseguibili su [[Unix]], e fu subito dopo applicato nella reimplementazione del [[kernel]] di quel sistema operativo.<ref name="sigplan2">{{Cita pubblicazione|autore=Dennis M. Ritchie|data=1993-03-01|titolo=The development of the C language|rivista=ACM SIGPLAN Notices|volume=28|numero=3|pp=201–208|accesso=2023-12-08|doi=10.1145/155360.155580|url=https://dl.acm.org/doi/10.1145/155360.155580}}</ref> Durante gli anni '80, C gradualmente crebbe in popolarità, diventando nel terzo millennio uno dei linguaggi più usati in assoluto,<ref name="langpop">{{cite web |url=http://www.langpop.com/ |title=Programming Language Popularity |year=2009 |access-date=16 gennaio 2009 |url-status=dead |archive-url= https://web.archive.org/web/20090116080326/http://www.langpop.com}}</ref><ref name="TIOBE-2009">{{cite web |url=http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html | title=TIOBE Programming Community Index |year=2009 |access-date=6 maggio 2009 |url-status=dead |archive-url= https://web.archive.org/web/20090504181627/http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html}}</ref> con [[Compilatore|compilatori]] disponibili per praticamente ogni [[Architettura (computer)|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.<ref name="ward198308">{{cite news |last=Ward |first=Terry A. |url=https://archive.org/stream/byte-magazine-1983-08/1983_08_BYTE_08-08_The_C_Language#page/n267/mode/2up |title=Annotated C / A Bibliography of the C Language |work=Byte |date=agosto 1983 |access-date=31 gennaio 2015 |pages=268}}</ref><ref name="prinz">{{Cita libro|url=https://books.google.com/books?id=4Mfe4sAMFUYC|titolo=C in a Nutshell|cognome=Prinz|nome=Peter|cognome2=Crawford|nome2=Tony|data=16 dicembre 2005|editore=O'Reilly Media, Inc.|isbn=9780596550714|p=3|lingua=en}}</ref> Dal 1989, C è normato dall'[[American National Standards Institute]] (ANSI) e dall'[[International Organization for Standardization]] (ISO).
Integra caratteristiche dei linguaggi di [[linguaggio di programmazione a basso livello|basso livello]], ovvero [[Carattere (informatica)|caratteri]], numeri e [[Indirizzo di memoria|indirizzi]], che possono essere indicati tramite gli operatori aritmetici e [[Connettivo logico|logici]] di cui si servono le macchine reali<ref>{{cita|ILC2|p. xiv}}.</ref>. C è stato concepito per essere snello e performante, si avvale peraltro di numerose librerie per far fronte ad ogni tipo di esigenza, in particolare la [[libreria standard del C]]. Tali librerie, sotto forma di file di intestazione o [[header file|file]] con suffisso -h, possono essere caricate mediante la direttiva ''#include'' del [[preprocessore]].
 
C è un linguaggio procedurale imperativo, che supporta la [[programmazione strutturata]], la [[Visibilità (programmazione)|visibilità lessicale]] e la [[ricorsione]], e possiede un [[Sistema dei tipi|sistema di tipi]] statico. Il linguaggio C permette l'utilizzo a basso livello alla [[Memoria (informatica)|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.<ref name="cppreference2">{{cite web|url=http://en.cppreference.com/w/c/language/history|title=History of C|access-date=28 maggio 2018|archive-url=https://web.archive.org/web/20180529130541/http://en.cppreference.com/w/c/language/history|url-status=live}}</ref>
 
A partire dal 2000, C è constantemente classificato tra i primi due linguaggi nell'indice TIOBE, una misura di popolarità dei linguaggi di programmazione.<ref name="TIOBE-2021">{{cite web|title=TIOBE Index for October 2021|url=https://www.tiobe.com/tiobe-index/|access-date=2021-10-07|archive-url=https://web.archive.org/web/20180225101948/https://www.tiobe.com/tiobe-index/|url-status=live}}</ref>
 
== Storia ==
Riga 79 ⟶ 83:
Questa grande libertà, la complessità sintattica del linguaggio (che come abbiamo visto contiene poche istruzioni di base) e il ruolo centrale dei puntatori, che è necessario usare praticamente fin dai primi programmi, lo rendono quindi un linguaggio ostico e sconsigliabile ai neofiti, che cadono quasi subito in una serie di trappole che, se pure ovvie per un esperto, sono molto difficili da individuare per un principiante.
 
Grazie alla particolare efficienza del codice prodotto dai suoi compilatori, C venne utilizzato per riscrivere la maggior parte del codice del sistema [[UNIX]], riducendo l'uso del linguaggio assembly ad un piccolo gruppo di funzioni. La sua importanza tuttavia, crebbe solo dopo il [[1978]] con la pubblicazione, da parte di [[Brian Kernighan]] e [[Dennis Ritchie]], del libro ''[[Il linguaggio C|The C Programming Language]],'' nel quale il linguaggio venne definito in modo preciso per la prima volta.
La sua importanza tuttavia, crebbe solo dopo il [[1978]] con la pubblicazione, da parte di [[Brian Kernighan]] e [[Dennis Ritchie]], del libro ''[[Il linguaggio C|The C Programming Language]],'' nel quale il linguaggio venne definito in modo preciso.
 
Il suo successivo larghissimo utilizzo portò alla nascita di diversi [[dialetto|dialetti]] e quindi alla necessità di definirne uno standard. A questo scopo, nell'estate del [[1983]], venne nominato un comitato con il compito di creare uno standard ANSI (''[[ANSI|American National Standards Institute]]'') che definisse il linguaggio C una volta per tutte. Il processo di standardizzazione, il quale richiese sei anni (molto più del previsto), terminò nel dicembre del [[1989]] e le prime copie si resero disponibili agli inizi del [[1990]]. Questa versione di C è normalmente chiamata C89. Lo standard venne anche adottato dall{{'}}''International Organisation for Standardisation'' ([[ISO]]) nel [[1999]] con il nome di C Standard ANSI/ISO. Nel [[1995]], fu adottato l'Emendamento 1 al C Standard che, fra le altre cose, ha aggiunto nuove funzioni alla [[libreria software|libreria]] standard del linguaggio. Usando come documento base il C89 con l'Emendamento 1 e unendovi l'uso delle classi di [[Simula]], [[Bjarne Stroustrup]] iniziò a sviluppare [[C++]].
 
Il risultato finale del continuo sviluppo di C fu lo standard promulgato nel [[1999]], noto come ISO C99 (codice ISO 9899).
Riga 98 ⟶ 101:
 
=== Parole chiave ===
Il linguaggio C, come qualsiasi altro linguaggio di programmazione, consente la realizzazione di programmi adoperando un insieme di "[[Parola riservata|parole chiave]]" (keywords).
 
Lo standard ANSI ha definito il seguente insieme di parole chiave:
Riga 150 ⟶ 153:
#include <stdio.h>
</syntaxhighlight>
Questa linea è una [[direttiva di inclusione]] per il [[preprocessore]]. Il preprocessore è un programma (o un modulo di un [[Integrated Development Environment|ambiente integrato]]) che esegue alcune trasformazioni preliminari del [[codice sorgente]], prima che quest'ultimo venga consegnato al [[compilatore]] vero e proprio. In questo caso, la trasformazione richiesta consiste nel rimpiazzare la linea in questione con l'intero contenuto dello ''[[header file]]'' ("file di intestazione") "<code>stdio.h</code>". La presenza di [[parentesi angolari]] indica che il file si trova in una [[directory]] standard nota al preprocessore. Per includere un header (di solito creato dal programmatore) presente nella stessa cartella dove si trova il file da compilare si usa una sintassi del tipo:
<syntaxhighlight lang="c">
#include "nomeheader.h"
Riga 167 ⟶ 170:
Una linea di questo tipo costituisce l'inizio di una definizione di funzione, in questo caso la [[funzione main|funzione <code>main</code>]]. La funzione <code>main</code> costituisce il [[entry point|punto di ingresso]] di un programma C: l'esecuzione di un programma inizia dalla prima [[Istruzione (informatica)|istruzione]] del <code>main</code> e termina con l'ultima. Eventuali altre funzioni entreranno in gioco solo se e quando richiamate (direttamente o indirettamente) dal <code>main</code>. In assenza di una funzione <code>main</code>, il compilatore non può produrre un [[programma eseguibile]] (ma potrebbe produrre una ''libreria'').
 
La [[parolaParola chiave (programmazione)riservata|parola chiave]] iniziale <code>int</code> rappresenta il tipo del valore restituito dalla funzione. Nel caso speciale del <code>main</code>, esso viene interpretato come valore restituito dall'intero programma al [[sistema operativo]]. Coerentemente con una convenzione universale circa i valori restituiti dai programmi al sistema, il <code>main</code> restituisce ''sempre'' un numero intero, nonostante alcuni testi riportino erroneamente anche dichiarazioni della funzione <code>main</code> con tipo di ritorno <code>void</code> (vedi [[ANSI C]]).
<syntaxhighlight lang="c">
{
Riga 175 ⟶ 178:
printf("Hello, world!\n");
</syntaxhighlight>
Questa riga costituisce una chiamata di funzione; in altre parole, richiede che venga eseguita tale funzione. <code>[[printf]]</code> è una funzione della [[libreria standard didel C]] che stampa un messaggio su [[standard output]]. Pertanto sullo schermo apparirà la scritta ''Hello, world!'' (senza doppi apici, che servono nel codice sorgente a indicare inizio e fine della [[Stringa (informatica)|stringa]]).
 
<code>''\n''</code> è una ''sequenza di escape'', ovvero una sequenza di caratteri (che in C cominciano sempre con il carattere <code>''\''</code>) che verranno tradotti in fase di compilazione in un unico carattere (solitamente non stampabile od interpretato in altro modo). In particolare, <code>''\n''</code> verrà tradotto nel carattere di fine riga che, quando usato con le librerie standard in modalità testo (come con <code>printf</code>), indica l'avanzamento di linea ed il ritorno a capo del testo. Quindi, se il programma viene usato interattivamente, in genere uno spostamento del [[cursore]].