C (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
"C" essendo un nome proprio non richiede l'articolo determinativo: rimuovo il suddetto |
|||
Riga 18:
In [[informatica]], '''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]].
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 libro|titolo=Il Linguaggio C - Principi di programmazione e manuale di riferimento (Seconda edizione) - Brian W. Kernighan, Dennis M. Ritchie|editore=Pearson Prentice Hall|p=Introduzione - XIV}}</ref>.
== Storia ==
Il linguaggio fu originariamente sviluppato da [[Dennis Ritchie]]<ref>{{Cita pubblicazione |autore-capitolo=Dennis Ritchie |autore-capitolo2=Brian Kernighan | data=2004 |titolo=Il linguaggio C. Principi di programmazione e manuale di riferimento |editore=Prentice Hall |capitolo=XI |p=320 |url=https://www.pearson.it/opera/pearson/0-2552-il_linguaggio_c ||citazione=
La prima standardizzazione
== Descrizione ==
Nato insieme a [[Unix]], C è supportato dalla totalità dei [[sistemi operativi]] di largo uso impiegati ed è impiegato principalmente per la realizzazione di [[sistemi operativi]], [[linguaggi di programmazione]], [[Libreria (software)|librerie]], [[videogioco|giochi]] e per [[applicazione (informatica)|applicazioni]] altamente performanti; è rinomato per la sua [[efficienza (informatica)|efficienza]] e si è imposto come linguaggio di riferimento per la realizzazione di software di sistema su gran parte delle piattaforme [[hardware]] moderne. La standardizzazione del linguaggio (da parte prima dell'[[ANSI]] e poi dell'[[ISO]]) garantisce la [[portabilità]] dei programmi scritti in C (standard, spesso detto ANSI C) su qualsiasi piattaforma; oltre che per il software di sistema, è stato a lungo il linguaggio dominante in tutta una serie di altri [[dominio applicativo|domini applicativi]] caratterizzati mirati sull'efficienza. Esempi tipici sono le [[telecomunicazioni]], il [[Controllo industriale|controllo di processi industriali]] e il software [[sistema real-time]]. Il predominio
=== Caratteristiche generali ===
La sintassi
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,
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
Il risultato finale del continuo sviluppo
Con la versione C11 (2011) vengono lievemente rivisti alcuni comandi, mentre la versione C18 (2018) ha corretto alcune criticità della C11, senza tuttavia introdurre alcuna nuova funzionalità.
Riga 141:
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
<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]].
Riga 227:
== Linguaggi collegati ==
Molti tra i principali linguaggi di programmazione moderni sono ispirati
=== C++ ===
{{vedi anche|C++}}
Il linguaggio di programmazione [[C++]] fu originariamente derivato
[[Bjarne Stroustrup]], il creatore di C++, ha ripetutamente suggerito<ref>{{Cita web |url=http://www.research.att.com/~bs/sibling_rivalry.pdf|titolo=Sibling Rivalry: C and C++}}</ref> che le incompatibilità tra
Oggi, le maggiori differenze (a parte l'aggiunta
* <code>inline</code> - le [[funzione inline|funzioni inline]] hanno lo ''scope'' globale in C++<!--, and in the file (so-called "static") scope in C. In simple terms, this means that in C++, any definition of any inline function (but irrespective of C++ function overloading) must conform to C++'s "[[One Definition Rule]]" or ODR, requiring that either there be a single definition of any inline function or that all definitions be semantically equivalent; but that in C, the same inline function could be defined differently in different ''translation units'' (translation unit typically refers to a [[Computer file|file]]). (Note that Microsoft C++ compilers define inline functions as C99 ones)-->.
* Il tipo <code>bool</code>
* Singole costanti di caratteri (racchiuse tramite apici singoli) hanno la dimensione di un <code>int</code> in C e di un <code>char</code> in C++.
<!-- Quindi in C <code>sizeof 'a' == sizeof(int)</code> mentre in C++ <code>sizeof 'a' == sizeof(char)</code>.--><!-- Nevertheless, even in C they will never exceed the values that a <code>char</code> can store, so <code>(char)'a'</code> is a safe conversion that will only change the type of the expression (here it is changed from int to char), but not its value (which on systems using ASCII-encoded characters is 97).-->
* Parole chiave addizionali sono introdotte
* In C++, il compilatore crea automaticamente un ''tag'' per ogni <code>struct</code>, <code>union</code> o <code>enum</code>, quindi <code>struct S {};</code> in C++, in C è equivalente a <code>typedef struct S {} S;</code>.
=== Objective-C ===
{{Vedi anche|Objective C}}
Il linguaggio Objective C deve la sua popolarità a [[Apple]] che lo ha scelto come base per i suoi sistemi operativi [[macOS]], [[iOS]], [[watchOS]] e [[tvOS]]. È un linguaggio orientato agli oggetti e, a differenza
Nel 2014, Apple presenta un nuovo linguaggio, [[Swift (linguaggio di programmazione)|Swift]] che ha sostituito Objective C nella programmazione sui sistemi operativi sopracitati.
|