Corso di C con Linux

Iniziamo a programmare

 

Prima di scrivere il nostro primo programma, è necessario fare la classica distinzione tra processo e programma.
Un programma è un insieme di istruzioni in codice macchina e dati memorizzati in formato eseguibile ed è come tale un'entità passiva.
Un processo è invece un'istanza del programma in esecuzione ed è quindi un'identità dinamica in costante cambiamento, le cui istruzioni in codice macchina sono eseguite dal processore.
E’ particolarmente utile ricordarci questo anche quando programmiamo in C.
Quando abbiamo di fronte un problema che vogliamo risolvere con un nostro programma, generalmente lo descriviamo tramite delle azioni che la macchina deve compiere per risolverlo.
Una volta compilato il codice, il passo successivo sarà di "darlo in pasto alla macchina" ed ecco che lì il nostro programma diventa uno o più processi.
Come vedremo successivamente, Linux è un sistema operativo multitasking, ovvero permette l'esecuzione di più processi contemporaneamente e in Unix uno stesso programma può generare anche più processi.
In questo capitolo inizieremo veramente a programmare, a partire da esempi banali (alcuni lo sono anche troppo, ma non abbiate fretta e presto vedrete i risultati!).

Breve storia del linguaggio C.
Per comprendere pienamente la filosofia di questo potentissimo linguaggio, è necessario dare una breve occhiata al periodo storico in cui fece la sua comparsa.
I primi embrioni di quello che sarebbe stato il C iniziarono a comparire nel 1969, grazie al lavoro di Brian Kernighan e Dennis Ritchie presso i laboratori della mitica “Bell Research”, contemporaneamente ai primi esperimenti su un nuovo sistema operativo, battezzato UNIX (a tal proposito vi rimando alle lezioni 5, 6 e 7 del corso di Sistemi Operativi).
Il C venne specificatamente creato per permettere ai programmatori di accedere ai registri interni della macchina e agli slot di I/O e di utilizzare indirizzi assoluti, fornendo nel contempo strumenti per la modularizzazione del testo dei programmi, così come veniva richiesto dai progetti sempre più corposi, sviluppati contemporaneamente da più persone, che a quell’epoca facevano la loro prima comparsa.
Durante gli anni ’60 i sistemi operativi per computer cominciarono a diventare sempre più complessi con l’introduzione di funzionalità multi-terminale e multi-processo.

Inizialmente i sistemi operativi venivano pazientemente e laboriosamente realizzati usando il codice assembler, il che faceva lievitare inevitabilmente i tempi e i costi necessari per avere calcolatori commerciabili.
Inoltre il codice assembler non si prestava ad una facile comprensione ed era perciò difficile scoprire (ed eliminare) le cause di eventuali bug che venivano via via segnalati.
La necessità di ridurre tempi e costi di produzione fu la principale motivazione che portò al linguaggio C, implementato per la prima volta in assembler su un PDP-7 della Digital Equipment Corporation.
Una volta pronta una semplice versione assembler divenne possibile riscrivere il compilatore direttamente in C; da allora, eccetto piccole porzioni di codice scritto in assembler per questioni di efficienza, il nuovo linguaggio venne usato per implementare Unix.
Questo è uno dei principali motivi che rendono il C lo strumento principe per la programmazione di sistemi basati su Unix, tra cui il nostro amato Linux.

Iniziamo col conoscere le parole chiave del linguaggio.
Il C è case-sensitive, cioè distingue tra lettere minuscole e lettere maiuscole.

Le parole chiave del C, elencate sotto, sono tutte minuscole:

  auto    break  case     char     const    continue goto   switch
  default do     double   else     enum     extern   float  for    struct
  if      int    long     register return   short    signed sizeof static
  typedef union  unsigned void     volatile while

Sul significato di ognuna di esse ci soffermeremo nel seguito; per ora vediamo come è composto un programma scritto in C.
La composizione di un programma C può essere riassunta in quattro elementi di base:
- espressioni
- istruzioni
- blocchi di istruzioni
- blocchi di funzioni

A partire dalla prossima lezione cominceremo a conoscere gli elementi base del linguaggio, ovvero le espressioni e le variabili.

 

Torna all'indice Generale del corso di Corso di C con Linux di Software Planet