C (linguaggio)
thumb|right|Copertina della prima edizione del Kernighan & Ritchie, la "bibbia" del C In informatica, il C è un linguaggio di programmazione.
Fu ideato nei Bell Laboratories della AT&T nel 1972 da Dennis Ritchie come evoluzione del linguaggio B di Ken Thompson usato per la scrittura dei primi sistemi operativi UNIX. Lo stesso Thompson nel 1970 si era a sua volta ispirato al linguaggio BCPL di Martin Richards pensato per scrivere sistemi operativi e software di sistema.
Il C viene classificato come linguaggio ad alto livello, la scrittura delle istruzioni cioé, è indipendente dalla architettura del calcolatore su cui le istruzioni stesse saranno eseguite. Il grande successo del C è dovuto a diversi fattori: prima di tutto la felice scelta del modo di astrazione dall'hardware, che pur essendo del tutto logico e generico rimane molto vicino all'hardware stesso: il linguaggio C si basa su poche istruzioni chiave molto semplici, che spesso (come gli operatori di autoincremento, autodecremento e aritmetici con assegnazione) ricalcano l'assembly delle CPU e sono traducibili direttamente con una singola istruzione di linguaggio macchina; riserva un ruolo centrale al concetto di puntatore, che viene generalizzato fino a concidere con l'indirizzamento indiretto, un modo di accedere alla memoria hardware caratteristico di tutte le moderne CPU. Questo rende il C un linguaggio particolarmente efficiente. D'altra parte, rispetto al linguaggio assembly il C ha in più una struttura logica definita e leggibile, funzioni in stile Pascal e soprattutto il controllo sui tipi (in fase di compilazione), che manca completamente in assembly.
Inoltre la grammatica e la sintassi del C sono molto libere e flessibili, permettendo di scrivere istruzioni complesse e potenti in poche righe di codice (ma anche istruzioni assolutamente criptiche e illeggibili). In definitiva, il successo del C fu decretato dall'essere un linguaggio creato da programmatori esperti, per essere usato da programmatori esperti.
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, ne fanno viceversa 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 ad un occhio inesperto.
Grazie alla particolare efficienza del codice prodotto dai sui compilatori, il C venne utilizzato per riscrivere la maggior parte del codice del sistema UNIX, riducendo l'uso dell'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 The C Programming Language nel quale il linguaggio venne definito in modo preciso.
Il suo successivo larghissimo utilizzo portò alla nascita di diversi dialetti e quindi alla necessità di definirne uno standard, realizzatosi nel 1983 con la versione ANSI (American National Standards Institute) del C. Prendendo spunto da questa versione definitiva, e unendo al C l'uso delle classi di Simula, Bjarne Stroustrup iniziò a sviluppare il C++.
Lo standard attuale del linguaggio è stato definito dall'International Standard Organization (ISO) nel 1999, ed è noto come ISO C99 (codice ISO 9899).
Programma di esempio
Hello, world!
Il seguente esempio stampa il testo "Hello world".
#include <stdio.h>
int main(void)
{
printf("Hello world\n");
return 0;
}
Il programma che stampa a video queste due parole è il programma di base per qualsiasi linguaggio di programmazione, il primo che viene fatto realizzare a chi muove i primi passi nella programmazione. Cosa fa precisamente ogni riga di questo programma, che ha come risultato finale quello di far comparire a video la scritta "Hello world" ?
- La prima riga, #include <stdio.h> indica al compilatore che per poter compilare il programma è necessario avere a disposizione le funzioni definite nella libreria chiamata stdio.h. Il nome stdio deriva da "standard input output", in quanto la libreria contiene le funzioni che ci permettono di inviare dati al programma (input) e di ottenere risultati dal programma (output).
- Il main è una funzione particolare chiamata anche punto d'ingresso o, in inglese, entry point: l'esecuzione del programma inizierà sempre a partire dalla prima riga del main: in mancanza di questo, il compilatore non sarà in grado di creare un file eseguibile. Il corpo del main è racchiuso tra le due graffe: istruzioni al di fuori di queste non saranno eseguite.
- L'istruzione printf è una funzione compresa nella libreria <stdio.h> che accetta un parametro (racchiuso tra le due parentesi tonde) e lo stampa a video. Pertanto sullo schermo apparirà la scritta Hello world (senza doppi apici, che indicano inizio e fine della stringa, e senza \n, che è un carattere speciale che indica l'avanzamento di linea ed il ritorno a capo del cursore).
- Infine return 0 è un comando che indica al compilatore la fine della funzione, in questo caso ritornando il codice d'errore 0 che, abitualmente, indica che non si sono trovati problemi in esecuzione.
Voci correlate
| Principali linguaggi di programmazione (tutti) | ||
|
Ada | ALGOL | APL | Awk | BASIC | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Haskell | IDL | Java | JavaScript | Lisp | LOGO | ML | Objective C | O'Caml| Pascal | Perl | PHP | PL/I | Prolog | Python | Ruby | SAS | Scheme | sh | Simula | Smalltalk | SQL | Visual Basic | ||
