Guida al C...{Prima parte}

« Older   Newer »
  Share  
zenzone
view post Posted on 25/8/2008, 06:03




Salve...oggi scriverò la prima guida sul C...

Introduzione:

Uno dei motivi per cui, ad oggi, è utile studiare il C è il fatto che esistono già migliaia di righe di codice scritte che permettono di risolvere quasi tutti i problemi legati alla programmazione (algoritmi, strutture, ecc.). Il C è un linguaggio che, come il Pascal ed il Fortran (che sono suoi predecessori), permette di salvare i valori in variabili, di strutturare il codice, di convogliare il flusso del programma utilizzando istruzioni di ciclo, istruzioni condizionali e funzioni, di eseguire operazioni di input/output a video o su file, di salvare dati in array o strutture; ma diversamente da questi linguaggi (e qui i suoi maggiori punti di forza) permette di controllare in modo più preciso le operazioni di input/output, inoltre il C è un linguaggio più sintetico e permette di scrivere programmi piccoli e di facile comprensione.

Differenza tra linguaggio interpretato e compilato:

Un programma viene sviluppato scrivendo il codice sorgente in un opportuno linguaggio definito, appunto, dalla sintassi del linguaggio stesso. La differenza tra compilazione ed interpretazione è molto importante ed influisce sia sulle prestazioni che sulle possibilità del linguaggio stesso.

Linguaggi come il C, C++, Delphi, Visual Basic sono linguaggi compilati e seguono questi passi: si scrive il codice in un editor, al più utilizzando un ambiente di sviluppo IDE che ne facilita la creazione, questo codice viene poi controllato per verificare che non ci siano errori e poi viene compilato, ovvero ogni istruzione viene trasformata nel corrispondente codice in linguaggio macchina che può essere, così, eseguito dal processore; questi sono i linguaggi compilati che vengono detti anche linguaggi imperativi, ed hanno il vantaggio di prestazioni migliori.

I linguaggi interpretati, invece, seguono una strada diversa, il codice sorgente viene, appunto, interpretato al volo e vengono, quindi, eseguite le istruzioni così come descritte nel codice sorgente; un esempio su tutti è il PHP il cui codice viene "elaborato" e restituisce una pagina html pura. La potenza di questo genere di linguaggi è, di fatto, l'alta portabilità e l'immediatezza tra quello che scriviamo e quello che viene presentato all'esecuzione del programma, ma rimangono dei problemi come la ricerca di errori nel codice sorgente o il carico di lavoro maggiore per il processore (che ogni volta deve elaborare la pagina).

I vantaggi del C:

Dimensioni del codice ridotte - Generalmente il codice sorgente di un programma in C ha un peso (in Kb) relativamente piccolo, in questo modo risulta molto agevole trasportare il codice da un PC ad un altro, anche usando un semplice floppy.

Dimensioni dell'eseguibile ridotte - Anche una volta compilato, un programma in C, risulta molto piccolo e quindi di più facile diffusione; ovviamente un programma in C potrà essere eseguito solamente sul medesimo Sistema Operativo per cui è stato compilato.

Efficienza dei programmi - Un programma scritto in C, proprio per la possibilità messa a disposizione dal linguaggio di gestire a fondo la memoria, e per le sue dimensioni ridotte, risulta particolarmente efficiente.

Può essere compilato su una vasta gamma di computer - Ogni computer può differire dagli altri per almeno due cose, l'architettura ed il sistema operativo; ad esempio un computer con processore x86 e Windows ha delle istruzioni (intese come istruzioni del processore) ed una gestione della memoria diverse da uno Sparc con Linux, però un programma scritto in C può essere compilato su ambedue le macchine, data l'alta disponibilità di compilatori per diverse piattaforme. Certo non è "portabile" come Java, però il fatto di essere sulla scena da molti anni e la sua enorme diffusione ne fanno, di fatto, uno strumento altamente portabile.

è un linguaggio di alto livello - Un linguaggio di programmazione viene definito di alto livello tanto più si avvicina alla terminologia umana, inversamente si dice che un linguaggio è di basso livello se il suo codice si avvicina al linguaggio macchina (quello formato da 0 ed 1); tipico esempio di linguaggio a basso livello è l'Assembler, mentre linguaggi ad alto livello sono, oltre al C, il C++, il Java e molti altri. La particolarità dei linguaggi ad alto livello è quella di avere una semplice sintassi in cui si usano parole della lingua inglese per descrivere comandi corrispondenti a decine di istruzioni in assembler o centinaia di istruzioni in linguaggio macchina.

Può maneggiare attività di basso livello - Il C è considerato il linguaggio di più basso livello tra i linguaggi di alto livello. Questo è dovuto al fatto che ha poche istruzioni, gestisce in maniera efficiente la memoria ed è possibile inserire direttamente all'interno di un file in C del codice Assembler.

Implementazione dei puntatori - Il C fa un largo uso di puntatori per le operazioni riguardanti la memoria, gli array, le strutture e le funzioni.

Loose Typing - In poche parole in C i tipi di dato delle variabili non devono necessariamente essere dichiarati; contrariamente, nel Pascal, nel C++ e nel Java i tipi devono essere dichiarati (strong typing); tale differenza risiede nelle scelte decisionali del progettista del linguaggio, che può volere più o meno flessibilità all'interno dello stesso (compilando un programma Java, la maggior parte delle volte si commettono errori di tipo). C'è chi dice che il metodo loose typing permetta al programmatore di commettere errori di tipo che potrebbero compromettere l'esecuzione del programma, ma è anche vero che con lo strong typing siamo costretti a seguire delle regole rigide che, a volte, non permettono di risolvere "velocemente" un problema.

Software da usare, Windows:

Per sviluppare in C sono necessari solamente due strumenti, un "sistema di compilazione" (un tool di programmi, come compilatore, linker, debugger, ecc.) che controlla gli errori e traduce il sorgente in C in un eseguibile (composto da istruzioni di codice macchina) ed un buon editor di testi. Anche se è possibile usare qualsiasi editor di testi disponibile sul proprio sistema operativo, qui segnaliamo quelli più usati e diffusi, per venire incontro alle più svariate esigenze, da chi vuole scrivere il codice direttamente dalla shell Linux a chi vuole un sistema integrato sotto Windows che permetta anche di compilare.

I software da usare sono:

DJGPP - Porting del famoso GCC (compilatore per macchine unix/linux), permette di compilare programmi scritti in C ed in C++; forse risulta un po' difficile da installare, ma una volta fatto il tutto, si può lavorare tramite l'interfaccia Rhide, un editor molto simile all'Edit del Dos. Il Djgpp è completamente gratuito sia per uso personale che commerciale. E' possibile usare il Djgpp, oltre che con sistemi Dos/Windows, anche con Caldera DR-DOS, FreeDOS ed OS/2.

Lcc-win32 - Questo ambiente di sviluppo ha al suo interno tutto quello di cui c'è bisogno, compilatore (assemblatore, linker, ecc.), interfaccia visuale per scrivere il codice, correggerlo, ecc., il manuale utente e documentazione tecnica. Insomma è un ambiente di sviluppo completo per il linguaggio C. L'uso per scopi personali è gratuito, mentre per scopi commerciali è necessario comprare la licenza.

DevC++ - Anche questo prodotto è un IDE (Integrated Development Enviroment) di sviluppo e racchiude al suo interno un ottimo editor per windows e un porting del GCC come compilatore. Sono disponibili due versioni, la versione stabile, la 4, e la versione beta, la 5.

Borland C++ - Il compilatore della borland è uno dei migliori disponibili sul mercato, ovviamente l'ambiente di sviluppo completo è a pagamento, ma vale la pena di provare a fare il download della versione 5.5.

Microsoft Visual C++ -
L'ambiente di sviluppo più famoso del mondo è a pagamento, ma non si deve pensare che sia il migliore disponibile, arrivato alla versione .NET il compilatore C/C++ ha raggiunto un buon grado di maturità anche se fino alla versione 6 era possibile fare programmi che seppur non corretti giravano lo stesso o che andavano in conflitto appena eseguiti. Certamente l'interfaccia ha tutte le carte in regola per essere al top (completamento del testo, possibilità di usare wizard per costruire parti di codice, ed ovviamente integrazione tra le librerie per sviluppare in ambiente Windows e lo stesso linguaggio di programmazione). Il mio consiglio è di comprarlo se c'è una reale esigenza nell'ambito professionale; ai principianti consiglio di aspettare per due motivi, il costo (che però può risultare molto inferiore grazie alle licenze studente) e la difficoltà, almeno iniziale, nel suo utilizzo che sarebbe bene fosse accompagnata da un buon manuale.

Editor:

1st Page 2000 - Uno dei migliori editor disponibili per Windows, è abbastanza veloce, permette di aprire più file contemporaneamente, inoltre ha l'highlighting del testo, il conteggio del numero di righe e colonne, e molto altro; pensato soprattutto come editor html, si rivela uno strumento utile anche per scrivere programmi in C, C++ e Java.

jEdit - Ottimo editor multipiattaforma che servirebbe per scrivere codice in Java, ma che può essere usato tranquillamente per scrivere codice in C. La sua potenza risiede, oltre che nelle funzionalità avanzate che un editor deve avere (numero di riga, testo con highlighting, ecc.), anche nell'alto livello di configurabilità e nella sicurezza di poter usare JEdit con quasi tutti i sistemi operativi senza perdere in termini di prestazioni (trovandoci sempre lo stesso ambiente di lavoro, non siamo costretti ad imparare l'uso di editor diversi) e di resa del nostro codice (siamo sicuri che un testo scritto con jEdit per Windows è totalmente compatibile con il jEdit per Linux).

Mini NoteTab (Win 3.x) - Questo è un editor molto versatile disponibile per Windows 3.x ed è pensato come sostituto per il notepad. Permette di lavorare su più file ed è leggero, veloce ed altamente configurabile.

Edit del DOS - Anche se un po' datato, l'Edit del DOS si presenta come un buon editor che ha, oltre alle funzioni base, un'ottima velocità e la visualizzazione delle righe e colonne di lavoro, molto utile quando il compilatore ci segnalerà un errore.

Software da usare, Linux:

GCC - GCC è l'acronimo di "GNU Compiler Collection" e permette di compilare codice scritto in C (ovviamente), C++, Objective-C, Ada, Fortran, Java, Pascal e qualsiasi altro linguaggio per cui esistano "front-end". E' vero, però, che spesso con il termine GCC si intende "GNU C Compiler", mentre vengono riservati altri nomi quando si intende l'utilizzo per linguaggi come il Fortran (GNAT) o il C++ (G++); sulle specifiche del GCC ci sarebbe da parlare per ore (standard supportati, tipo codice generato, ecc.), basti sapere che il GCC è un compilatore e non un preprocessore, quindi il codice sorgente di un file, sia C sia C++, produce un codice oggetto migliore e permette un'inspaniduazione migliore degli errori, grazie soprattutto al GDB "Gnu Debugger". Imparare ad usarlo è abbastanza facile, ad esempio per compilare un programma in C basta digitare da console

# gcc programma.c
imparare ad usarlo bene, e quindi averne la totale padronanza è tutt'altra cosa, ma se avete voglia di imparare, basta digitare, sempre da console,
# man gcc
ed iniziare a leggere. In questa guida, nelle lezioni finali, spiegheremo in dettaglio le maggiori opzioni di compilazione ed anche utilizzi avanzati dell'utility make per creare i makefile.

Editor:

Kdevelop - Giunto alla versione 2.1.5, questo ambiente di sviluppo non ha nulla da invidiare al Visual C++ della Microsoft; riconosce automaticamente i percorsi dove sono installati i programmi necessari (come GCC e Make) e le relative guide di supporto; è possibile creare semplici file in C o in C++, ma anche progetti completi "a finestre" per Linux. Ovviamente uno dei migliori programmi disponibili per Linux, ma, forse, troppo difficile da usare per il principiante che vuole scrivere semplici programmi in C.

VIM - Insieme ad Emacs è uno dei migliori editor disponibili per Linux; VIM è un editor di testo basato sul famoso Vi ed infatti il nome stesso sta per "Vi IMproved" (anche se originariamente stava per "Vi IMitation"). tra le sue molte caratteristiche menzioniamo l'uso di finestre multiple, aiuto in linea, scrolling orizzontale, formattazione del testo, supporto per il mouse, linguaggio di scripting incluso, uso dei plugin, indentazione automatica, colorazione del testo e molto altro. Forse un po' difficile da usare all'inizio, ma sicuramente uno strumento potente una volta che si è imparato ad usarlo. E' disponibile per praticamente tutti i sistemi operativi, e questo è un altro punto a favore di questo fantastico editor.

Emacs - Emacs (abbreviazione di Editor MACroS) viene considerato da alcuni molto più di un editor di testi (alcuni lo considerano un mini sistema operativo), per il semplice fatto che il suo cuore è formato da un interprete Lisp (chiamato elisp); le sue potenzialità sono enormi, dalla colorazione del testo, all'indentazione automatica, alla possibilità di interagire in modo trasparente con la documentazione, con il compilatore (ed eventuale debugger) e la totale funzione, volendo, anche di terminale Linux. Oltre ad essere disponibile, come VIM, per quasi tutti i sistemi operativi, ha la sua corrispondente interfaccia per ambienti grafici chiamata XEmacs.

Quanta Plus - Pensato soprattutto per lo sviluppo di pagine HTML, questo editor è il corrispettivo di 1st Page 2000 del mondo Linux. Proprio la sua semplicità d'uso e il suo supporto per svariati linguaggi ne fanno un editor da scegliere, magari rispetto ad altri più potenti, ma sicuramente più difficili da usare.

jEdit - Come per Windows, jEdit è disponibile anche per Linux; oltre alle già citate caratteristiche, ricordiamo che sul sito ufficiale è disponibile il download, non solo dei file java multipiattaforma, ma anche dell'.RPM per svariate distribuzioni; gli utenti Gentoo invece possono installarlo semplicemente digitando

# emerge jedit
così come quelli che usano Debian, i quali devono seguire queste semplici istruzioni
# pico /etc/apt/source.list
> deb http://dl.sourceforge.net/sourceforge/jedit ./
> deb-src http://dl.sourceforge.net/sourceforge/jedit ./
# apt-get update
# apt-get install jedit oppure # apt-get source jedit

GNU Nano - Versione avanzata del più famoso Pico, questo semplice ma potente editor è per coloro che vogliono scrivere codice dalla shell, senza entrare nell'ambiente grafico; a mio parere è uno degli editor non grafici migliori disponibili per Linux e vale la pena di usarlo se si vuole semplicità e velocità.

Software da usare, Mac os:

GCC - In MacOS X, il compilatore GCC è incluso avendo come base un sistema BSD di nome Darwin; quindi non c'è molto da dire, basta aprire una console ed è possibile iniziare ad usarlo; la compatibilità con quello per Linux dovrebbe essere praticamente assoluta.

CodeWarrior - Per MacOS Classic (7.x al 9.x) l'unico compilatore decente risulta essere CodeWarrior, che, però, non è gratuito. E' sicuramente un ottimo prodotto, disponibile, non solo per MacOS Classic, ma anche per MacOS X, Windows, Linux, Solaris, PalmOS. Vi consigliamo di comprarlo se ne avete realmente l'esigenza; cercando in rete potrete trovare altri compilatori, forse un po' meno potenti, ma gratuiti, per il vostro MacOS Classic.

Editor:

Emacs - Ebbene si, Emacs è installabile anche su sistemi Mac, quindi ve ne consigliamo caldamente l'uso, soprattutto perché in questo modo potrete lavorare con il medesimo editor anche quando cambiate sistema operativo.

VIM - VIM, come Emacs, può girare tranquillamente su sistemi MAC, ed è quindi possibile sfruttare tutta la potenza di questo fantastico editor anche sui computer "con la mela", senza grossi problemi.

jEdit - Se avete problemi ad installare i due editor precedenti o se volete un editor, forse un po' meno potente, ma sicuramente più intuitivo e semplice da usare, la vostra scelta potrebbe ricadere sul famoso editor multipiattaforma sviluppato in Java.


Cominciamo a scrivere i primi codici in C:

Il primo codice è il famosissimo Hello World che stampa una scritta a video:

CODICE
#include <stdio.h>

main ()
{
 printf("Hello World!");
}



Elementi fondamentali di un programma in C:

Ora che avete chiaro tutto ciò vi starete giustamente chiedendo a cosa serve l'#include? Cosa è il main()? A cosa servono le graffe? E i punti e virgola? Ecco la spiegazione:

CODICE
#include <stdio.h>

main ()
{
 printf("Hello World!");
}


#include è una direttiva del preprocessore, un comando, che permette di richiamare le librerie standard del C. Senza librerie un programma non avrebbe a disposizione i comandi per eseguire anche le operazioni più semplici, come leggere un file o stampare a video una scritta.

La funzione principale in un qualsiasi programma in C è la main() che, in questo caso, non ha parametri, ma può ricevere anche degli input da riga di comando. Il main è indispensabile ed unico e deve esserci sempre;

Le parentesi graffe servono, invece, per delimitare blocchi di istruzioni, o come vengono abitualmente chiamate "statement", che sonoeseguite in ordine, da quella più in alto, giù fino all'ultima;

Il punto e virgola, invece, serve per "chiudere" un'istruzione, per far capire che dopo quel simbolo inizia una nuova istruzione.

Entrando nel dettaglio della sintassi del Linguaggio C, possiamo notare che la prima funzione che incontriamo e che è anche una delle più usate è printf(), adibita a stampare a video tutto quello che gli viene passato come argomento e che fa parte della libreria <stdio.h>, senza la cui inclusione, non avrebbe senso.

All'interno di un programma C possono essere inseriti dei commenti, basti sapere, per adesso, che esistono due modi:

// - Tutto quello che sta a destra sulla medesima riga viene considerato commento e viene ignorato (ai fini dell'interpretazione del linguaggio) dal compilatore;

/* ... */ - Tutto quello che è compreso tra i due asterischi viene considerato commento; questa forma viene utilizzata per commenti su più righe.


La Compilazione:

Come già detto un programma in C può essere scritto anche con un semplice editor di testi come il Blocco note di Windows (o simile). Per poter vedere il risultato del codice dobbiamo salvare necessariamente il file con un'estensione ".c", ad esempio "hello.c". A questo punto non dobbiamo fare altro che compilare il programma.

In realtà la compilazione di un programma in C (spesso integrata in ambienti di sviluppo e quindi apparentemente trasparente ed uniforme) segue varie fasi:

Il codice sorgente viene controllato dal preprocessore che ha i seguenti compiti:
rimuovere eventuali commenti presenti nel sorgente;
interpretare speciali direttive per il preprocessore denotate da "#", come #include o #define.
controllare eventuali errori del codice

Il risultato del preprocessore sarà un nuovo codice sorgente "pulito" ed "espanso" che viene tradotto dal compilatore C in codice assembly;

L'assembler sarà incaricato di creare il codice oggetto salvandolo in un file (.o sotto Unix/Linux e .obj in Dos/Windows);

Il Link editor ha il compito di collegare tutti i file oggetto risolvendo eventuali dipendenze e creando il programma (che non è altro che un file eseguibile).

Avete ancora il vostro file "hello.c"? spero di si, perché è giunto il momento di compilarlo; se possedete un ambiente di sviluppo come Dev-C++ o Visual C++ dovete solamente cercare il comando "Compila" od "Esegui", il programma provvederà, non solo ad eseguire tutte le operazioni citate, ma, una volta compilato, manderà in esecuzione il vostro programma presentandovi il risultato a video.

Per chi stesse usando, invece, compilatori come il DJGPP o il GCC, la compilazione (intesa in tutte le sue fasi) deve essere fatta da riga di comando (dalla shell per capirsi), e, successivamente, sempre da riga di comando, si deve lanciare il file eseguibile risultante (in linux con gcc, di default il file eseguibile si chiama a.out, mentre in ambiente Dos/Windows generalmente ha lo stesso nome del sorgente ma con estensione .exe, invece che ".c").

Per compilare basta posizionarsi nella solita cartella dove risiede il file sorgente e scrivere:

CODICE
# gcc hello.c


Bene con questo concludo la prima parte della guida sulla programmazione in C...

Ciauz alla prossima...






 
Top
MaynardBlade
view post Posted on 14/3/2010, 14:00




Ma l'hai copiaincollata da HTML.it!
 
Top
1 replies since 25/8/2008, 06:03   339 views
  Share