{"id":149,"date":"2010-05-17T13:41:00","date_gmt":"2010-05-17T13:41:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=149"},"modified":"2010-05-17T13:41:00","modified_gmt":"2010-05-17T13:41:00","slug":"guida-al-c-parte-1-il-resto-del-pinguino","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/guida-al-c-parte-1-il-resto-del-pinguino\/","title":{"rendered":"Guida al C: parte 1 (Il resto del Pinguino)"},"content":{"rendered":"<div><\/div>\n<p><a href=\"http:\/\/1.bp.blogspot.com\/_Tg1CIil2fDM\/S-qtkwaF4NI\/AAAAAAAAAkQ\/UqDgdwp1FYg\/s1600\/Il+resto+del+Pinguino+489x48(2).png\"><img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/_Tg1CIil2fDM\/S-qtkwaF4NI\/AAAAAAAAAkQ\/UqDgdwp1FYg\/s1600\/Il+resto+del+Pinguino+489x48(2).png\" border=\"0\" alt=\"\"><\/a><\/p>\n<div><span><a href=\"http:\/\/www.gambas-it.org\/wp\/?page_id=63\">Tratto da &#8220;Il resto del Pinguino&#8221;<\/a><\/span><\/div>\n<div><\/div>\n<div><span>La programmazione \u00e8 sicuramente una delle possibilit\u00e0 pi\u00f9 affascinanti che l&#8217;informatica pu\u00f2 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\u00f2 variare dalla conoscenza personale alla passione, dal lavoro all&#8217;utilit\u00e0. Chi si avvicina a questo mondo lo fa attraverso il linguaggio che ritiene pi\u00f9 idoneo per le proprie esigenza e fortunatamente il mondo informatico pulula di scelte tra le quali poter vagliare quella migliore. Esiste per\u00f2 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 \u00e8 il linguaggio pi\u00f9 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\u00e0 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.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>Perch\u00e9 scegliere il C<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>I motivi per cui bisogna scegliere il C sono molteplici e tutti egualmente importanti. Sicuramente un punto a suo favore \u00e8 il fatto che esso sia di tipo compilato. Un linguaggio compilato \u00e8 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\u00e0 un codice che comunica quasi direttamente con l&#8217;hardware su cui gira rendendo il proprio programma finale pi\u00f9 performante \u00e8 meno avido di risorse poich\u00e8 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\u00e0 possibile manipolare le variabili richiamandole direttamente dall&#8217;indirizzo preciso in cui risiedono in memoria. Sar\u00e0 possibile creare elementi che ricalchino la propria idea di dato ridefinendo quelli gi\u00e0 esistenti o sar\u00e0 possibile procurarsi della memoria per le proprie variabili anche l\u00ec dove apparentemente pare impossibile. Infine non bisogna dimenticare che il C \u00e8 multipiattaforma; questo vuol dire che il codice scritto su un computer con sistema operativo GNU\/Linux pu\u00f2 essere eseguito senza problemi e senza alcuna modifica su sistemi Microsoft, Mac, Solaris e via discorrendo. Ovviamente, per\u00f2, bisogna tener presente che se nel proprio codice si implementano delle chiamate dirette a dei comandi di sistema tale propriet\u00e0 viene a decadere.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>Cosa serve per programmare in C<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Programmare in C \u00e8, oltre che un piacere, anche uno stile di vita. Il C \u00e8 volutamente minimale e tale scelta la si riscontra anche nell&#8217;atto pratico della programmazione. Per scrivere del buon codice in C non c&#8217;\u00e8 necessariamente bisogno di IDE sofisticati o altri fronzoli grafici, basta un semplice editor di testo (anche VI \u00e8 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\u00e0 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\u00ec il vostro codice senza alcun problema.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>Serve davvero imparare il C?<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Molti programmatori autodidatti tendono a descrivere il C come un linguaggio ormai obsoleto e sostengono che impararlo da zero \u00e8 inutile e porta via semplicemente del tempo prezioso. Non c&#8217;\u00e8 nulla di pi\u00f9 sbagliato! Il C, proprio per la potenza dei suoi strumenti e la pulizia dei suoi costrutti, \u00e8 un&#8217;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\u00f9, che molti linguaggi definiti \u201cpi\u00f9 moderni\u201d 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.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>Si inizia<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Dopo tanti preamboli \u00e8 giunto finalmente il momento di gustare un po&#8217; di codice che ci servir\u00e0 per fare amicizia con il C. Come ogni guida che si rispetti anche noi inizieremo dal pi\u00f9 classico degli \u201cHello World\u201d; il nostro intento sar\u00e0 proprio quello di stampare la celeberrima frase all&#8217;interno del nostro terminale. Apriamo il nostro editor e copiamo all&#8217;interno il seguente codice:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span><span><img decoding=\"async\" src=\"http:\/\/4.bp.blogspot.com\/_Tg1CIil2fDM\/S_FKaWL71xI\/AAAAAAAAAlk\/r1FqXFt9hh0\/s400\/c.png\" border=\"0\" alt=\"\"><\/span><\/span><\/div>\n<div><span><span><br \/><\/span><\/span><\/div>\n<div><span>Salviamo il file con il nome esempio.c nella nostra Home. Rechiamoci nel terminale e compiliamo il programma digitando il comando<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><i><span>gcc esempio. c &#8211; o esempio<\/span><\/i><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>seguito dal tasto invio. Se il terminale non restituisce errori possiamo lanciare il nostro programma con il comando<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><i><span>.\/esempio<\/span><\/i><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Analizziamo il codice:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span># include <stdio. h=\"\"><\/stdio.><\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>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\u00f2 che concerne il precompilatore, viene scritto sottoforma di normale codice con la sostanziale differenza, per\u00f2, che ogni rigo \u00e8 preceduto dal simbolo <\/span><b><span>#<\/span><\/b><span>.<\/span><\/div>\n<div><span>Una delle funzioni fondamentali del precompilatore \u00e8 quella di includere all&#8217;interno del nostro codice le funzioni necessarie affinch\u00e9 esso possa funzionare. Il C infatti gode di un core davvero leggero e si basa sulla propria modularit\u00e0 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\u00e9 \u00e8  l\u00ec che si trova la nostra funzione. Studieremo le librerie pi\u00f9 avanti in maniera pi\u00f9 approfondita.<\/span><\/div>\n<div>                                               <\/div>\n<div><b><span>int main( )<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>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&#8217;atto della compilazione. Come possiamo notare la parola main \u00e8 preceduta da int ed \u00e8 seguita dalle due parentesi tonde. Il termine int \u00e8 un indicatore di tipo e ci indica che ogni qualvolta usciamo dalla funzione main per un qualsiasi motivo (errore immissione dati da parte dell&#8217;utente, fine del programma, aborto essa ci dovr\u00e0 restituire necessariamente un valore intero, sia negativo che positivo. Per convenzione tale valore \u00e8 indicato con 0 se il programma termina in maniera naturale e valori diversi da 0 se si presentano altri errori.<\/span><\/div>\n<div><span>Le parentesi, invece, servono a ricordare che main \u00e8 una funzione e il loro scopo verr\u00e0 precisato nelle future lezioni della guida.         <\/span><\/div>\n<div>                                                   <\/div>\n<div><b><span>printf( &#8220;Hello World! \\n&#8221;) ;<\/span><\/b><\/div>\n<div>                                                    <\/div>\n<div><span>La funzione printf \u00e8 una delle funzioni basilari del linguaggio C. Essa ci permette di formattare particolarmente del testo e di  stamparlo sull&#8217;output standard del sistema. Il suo uso \u00e8 semplice ma non esclude funzionalit\u00e0 avanzate. In questo caso specifico abbiamo detto al linguaggio di stampare la stringa &#8221; Hello World &#8221; passandola come parametro alla funzione. Si noti il termine di escape \\n che indica di andare a capo subito dopo la parola &#8220;World&#8221;. Avremo modo di approfondire sia l&#8217;uso di printf che dei termini speciali di escape.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>Return 0;<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Come detto in precedenza, la funzione main deve restituire un intero quando si ha la necessit\u00e0 di uscire. Nel nostro caso stiamo dicendo, con il nostro codice, che abbiamo finito di fare ci\u00f2 che serviva all&#8217;interno del main e possiamo uscire senza problemi. Si noti che il valore di ritorno \u00e8 stato scelto come 0 per quanto detto prima. Tuttavia il suo valore \u00e8 arbitrario purch\u00e8 conforme al tipo dichiarato prima della funzione main. <\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>{}<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Le parentesi graffe svolgono nel C una funzione importante. Esse servono per delimitare graficamente (e non solo) l&#8217;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 \u00e8 fondamentale e non deve essere mai dimenticato poich\u00e9 indica al sistema che l&#8217;istruzione (o il blocco di istruzioni) termina in quel punto. Ovviamente il lettore finale potr\u00e0 benissimo usare comodamente il proprio sistema o un IDE se ritiene che esso possa facilitare l&#8217;apprendimento. Si tenga presente per\u00f2 che eventuali errori potrebbero essere dovuti al software di cui si dispone e non alla bont\u00e0 del codice che si scrive.<\/span><\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Tratto da &#8220;Il resto del Pinguino&#8221; La programmazione \u00e8 sicuramente una delle possibilit\u00e0 pi\u00f9 affascinanti che l&#8217;informatica pu\u00f2 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54,2,7,50,4,44],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","hentry","category-c","category-gnulinux","category-guide","category-il-resto-del-pinguino","category-opencode","category-windows"],"views":1152,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}