lunedì 17 maggio 2010

Guida al C: parte 1 (Il resto del Pinguino)



La programmazione è sicuramente una delle possibilità più affascinanti che l'informatica può offrirci. Essa ci permette di essere come un genitore che, mediante le proprie parole e le proprie indicazioni, insegna al suo bambino come deve comportarsi con le sollecitazioni che giungono dal mondo esterno. Saper programmare non vuol dire solo conoscere le parole chiave che ci permettono di gestire i nuovi elementi della tecnologia ma vuol dire dare al comportamento umano e naturale una struttura interpretativa algoritmica. Chiunque inizia a programmare lo fa per uno scopo preciso che può variare dalla conoscenza personale alla passione, dal lavoro all'utilità. Chi si avvicina a questo mondo lo fa attraverso il linguaggio che ritiene più idoneo per le proprie esigenza e fortunatamente il mondo informatico pulula di scelte tra le quali poter vagliare quella migliore. Esiste però un linguaggio che nel corso della storia informatica ha saputo ritagliarsi il posto di padre di tutti i linguaggi, ovviamente sto parlando del C. Il C è il linguaggio più snobbato dai neofiti ma diventa indispensabile nel momento in cui lo si impara a conoscere e ad usare. Esso gode di particolari costrutti e particolari elementi che lo rendono adatto a tutti i tipi di obiettivi software. Il fine del nostro percorso sarà quello di imparare le basi di questo linguaggio in modo che il programmatore, che si ritrova a consultare queste pagine, sappia dare forma alle propria idee grazie alla propria macchina ed a questo linguaggio.

Perché scegliere il C

I motivi per cui bisogna scegliere il C sono molteplici e tutti egualmente importanti. Sicuramente un punto a suo favore è il fatto che esso sia di tipo compilato. Un linguaggio compilato è un particolare linguaggio di programmazione il cui codice viene passato ad un software detto compilatore che provvede a trasformarlo in linguaggio macchina. In questo modo si avrà un codice che comunica quasi direttamente con l'hardware su cui gira rendendo il proprio programma finale più performante è meno avido di risorse poichè costruito ad hoc per la macchina su cui si vuole che esso funzioni. Una caratteristica di rilevante importanza del C sono gli strumenti che esso propone. Grazie a dati come i puntatori, ad esempio, sarà possibile manipolare le variabili richiamandole direttamente dall'indirizzo preciso in cui risiedono in memoria. Sarà possibile creare elementi che ricalchino la propria idea di dato ridefinendo quelli già esistenti o sarà possibile procurarsi della memoria per le proprie variabili anche lì dove apparentemente pare impossibile. Infine non bisogna dimenticare che il C è multipiattaforma; questo vuol dire che il codice scritto su un computer con sistema operativo GNU/Linux può essere eseguito senza problemi e senza alcuna modifica su sistemi Microsoft, Mac, Solaris e via discorrendo. Ovviamente, però, bisogna tener presente che se nel proprio codice si implementano delle chiamate dirette a dei comandi di sistema tale proprietà viene a decadere.

Cosa serve per programmare in C

Programmare in C è, oltre che un piacere, anche uno stile di vita. Il C è volutamente minimale e tale scelta la si riscontra anche nell'atto pratico della programmazione. Per scrivere del buon codice in C non c'è necessariamente bisogno di IDE sofisticati o altri fronzoli grafici, basta un semplice editor di testo (anche VI è perfetto! ), il caro buon vecchio amico terminale ed ovviamente un compilatore. Anche se si pensa che tanti programmi siano scomodi per scrivere del codice, ci si renderà subito conto che invece questi strumenti, leggeri, sono molto pratici e svolgono perfettamente il loro dovere a differenza di un unico programma che cerca di emularli tutti. Scegliete per bene i vostri strumenti e studiante i manuali di tali programmi per imparare ad usarli perfettamente e poter scrivere così il vostro codice senza alcun problema.

Serve davvero imparare il C?

Molti programmatori autodidatti tendono a descrivere il C come un linguaggio ormai obsoleto e sostengono che impararlo da zero è inutile e porta via semplicemente del tempo prezioso. Non c'è nulla di più sbagliato! Il C, proprio per la potenza dei suoi strumenti e la pulizia dei suoi costrutti, è un'ottima base dalla quale partire anche per iniziare a comprendere alcuni argomenti che sono importanti indipendentemente dal linguaggio che si usa. Bisogna tener presente, in più, che molti linguaggi definiti “più moderni” sono ottenuti o vengono creati partendo proprio dal C. Il tanto blasonato C++ o anche il Java, altri non sono che discendenti del linguaggio di cui ci stiamo occupando.

Si inizia

Dopo tanti preamboli è giunto finalmente il momento di gustare un po' di codice che ci servirà per fare amicizia con il C. Come ogni guida che si rispetti anche noi inizieremo dal più classico degli “Hello World”; il nostro intento sarà proprio quello di stampare la celeberrima frase all'interno del nostro terminale. Apriamo il nostro editor e copiamo all'interno il seguente codice:


Salviamo il file con il nome esempio.c nella nostra Home. Rechiamoci nel terminale e compiliamo il programma digitando il comando

gcc esempio. c - o esempio

seguito dal tasto invio. Se il terminale non restituisce errori possiamo lanciare il nostro programma con il comando

./esempio

Analizziamo il codice:

# include

Quando compiliamo un codice in C, esso, esegue un passaggio preliminare, ovvero viene sottoposto al precompilatore. Questo strumento si occupa di svolgere delle particolari azioni utili prima che il codice venga analizzato dal compilatore. Tutto ciò che concerne il precompilatore, viene scritto sottoforma di normale codice con la sostanziale differenza, però, che ogni rigo è preceduto dal simbolo #.
Una delle funzioni fondamentali del precompilatore è quella di includere all'interno del nostro codice le funzioni necessarie affinché esso possa funzionare. Il C infatti gode di un core davvero leggero e si basa sulla propria modularità per includere il necessario nel momento in cui se ne sente il bisogno. Dovendo richiamare la funzione printf diciamo al precompilatore di includere (istruzione include ) la libreria standard stdio. h poiché è lì che si trova la nostra funzione. Studieremo le librerie più avanti in maniera più approfondita.
int main( )

Ogni programma scritto in C ha bisogno di una particolare funzione che viene vista come punto di partenza dal quale il software, una volta compilato, inizia a girare. Questa funzione deve essere sempre presente e deve chiamarsi obbligatoriamente main . Un listato privo della funzione main non viene compilato e restituisce errore all'atto della compilazione. Come possiamo notare la parola main è preceduta da int ed è seguita dalle due parentesi tonde. Il termine int è un indicatore di tipo e ci indica che ogni qualvolta usciamo dalla funzione main per un qualsiasi motivo (errore immissione dati da parte dell'utente, fine del programma, aborto essa ci dovrà restituire necessariamente un valore intero, sia negativo che positivo. Per convenzione tale valore è indicato con 0 se il programma termina in maniera naturale e valori diversi da 0 se si presentano altri errori.
Le parentesi, invece, servono a ricordare che main è una funzione e il loro scopo verrà precisato nelle future lezioni della guida.
printf( "Hello World! \n") ;
La funzione printf è una delle funzioni basilari del linguaggio C. Essa ci permette di formattare particolarmente del testo e di stamparlo sull'output standard del sistema. Il suo uso è semplice ma non esclude funzionalità avanzate. In questo caso specifico abbiamo detto al linguaggio di stampare la stringa " Hello World " passandola come parametro alla funzione. Si noti il termine di escape \n che indica di andare a capo subito dopo la parola "World". Avremo modo di approfondire sia l'uso di printf che dei termini speciali di escape.

Return 0;

Come detto in precedenza, la funzione main deve restituire un intero quando si ha la necessità di uscire. Nel nostro caso stiamo dicendo, con il nostro codice, che abbiamo finito di fare ciò che serviva all'interno del main e possiamo uscire senza problemi. Si noti che il valore di ritorno è stato scelto come 0 per quanto detto prima. Tuttavia il suo valore è arbitrario purchè conforme al tipo dichiarato prima della funzione main.

{}

Le parentesi graffe svolgono nel C una funzione importante. Esse servono per delimitare graficamente (e non solo) l'inizio e la fine delle funzioni o dei blocchi logici. Omettere le parentesi provoca errore nella compilazione. Bisogna ricordarsi, pertanto, di controllare il codice in modo che ci siano tante parentesi graffe aperte quante ce ne sono chiuse. Si noti infine che al termine delle istruzioni viene posto un punto e virgola. Esso è fondamentale e non deve essere mai dimenticato poiché indica al sistema che l'istruzione (o il blocco di istruzioni) termina in quel punto. Ovviamente il lettore finale potrà benissimo usare comodamente il proprio sistema o un IDE se ritiene che esso possa facilitare l'apprendimento. Si tenga presente però che eventuali errori potrebbero essere dovuti al software di cui si dispone e non alla bontà del codice che si scrive.

0 commenti:

Related Posts with Thumbnails