Learning GNU C: le funzioni | OTHER chapters | |||
Le funzioni sono blocchi di codice di programmazione dei programmi C. La gran parte di un programma in C è composto da blocchi di codice, o funzioni, contrassegnati da un nome ( o etichetta ). Quando scrivete un programma, scrivete una serie di funzioni, che eseguiranno le operazioni di cui avete bisogno. Tuttavia, ci sono una serie di operazioni molto comuni, quali la stampa a video di messaggi testuali, che potranno interessare molti programmatori. In questo caso, invece di lasciare che ciascuno reinventi la ruota, i sistemi operativi GNU si attrezzano di intere librerie di funzioni predefinite, che eseguono le operazioni più comuni. Nel corso degli anni, si sono accumulate migliaia di queste funzioni. Se doveste scrivere un programma che esegua il gioco BINGO, potreste anche scrivere le funzioni per il gioco da voi stessi, ma potreste anche scoprire che qualcun altro ha già scritto le funzioni, per esempio, per generare numeri casuali, stampare a video i risultati, acquisire l'input dell'utente, etc. Ogni programma scritto in C deve avere una funzione chiamata:
Da questo punto, inizia l'esecuzione del programma. Il codice di un programma può essere interamente compreso all'interno della funzione
Compilate ed eseguite questo programma, prima di continuare. Se tutto va bene, il programma stamperà a video ( la periferica standard di output ) la stringa testuale: "hello, world". Questi i comandi per la compilazione e l'esecuzione, nel caso li aveste dimenticati:
Se ricevete un qualche messaggio, di errore o di semplice avviso, verificate che il vostro codice sia identico a quello scritto in questa pagina. Un messaggio di errore dovrebbe dirvi il numero di riga in cui si trova il vostro errore. Se, invece, avete scritto correttamente il codice, non riceverete alcun messaggio. Vediamo, ora, una breve descrizione di cosa fa ogni linea del codice. Non preoccupatevi se non comprendete bene alcune linee: vedremo ancora molti altri esempi.
Questa riga dice a GCC di includere le informazioni su come usare le funzioni contenute nella libreria "Standard Device Input/Output". Normalmente, la periferica standard di input è la tastiera, mentre la periferica standard di output è un terminale ( mostrato sul monitor ). La libreria
Da questa riga inizia la definizione della funzione
La parentesi graffe aperta segnala l'inizio di un blocco di codice. Tutto il codice compreso tra questa parentesi e la parentesi graffe di chiusura, fa parte della funzione
Questa riga è una chiamata di funzione: la funzione chiamata è
L'enunciato
La parentesi graffe di chiusura indica la fine del blocco di codice che costituisce la funzione
I commenti ( note ) sono testi di spiegazione aggiunti al programma: vengono ignorati dal compilatore, così da non influire, in alcun modo, sull'esecuzione del vostro programma. Mano a mano che le dimensioni del vostro programma crescono, troverete molto utili i commenti inseriti nel codice, che vi permettono di ricordare cosa il programma sta facendo. Negli esempi di questo libro, useremo i commenti per spiegare cosa sta accadendo. E' possibile inserire i commenti in due modi diversi: il modo più comune è porre i simboli:
rispettivamente, all'inizio e alla fine del commento. I commenti così delimitati possono occupare più righe del programma. Il secondo modo, per inserire un commento all'interno del programma, è porre il simbolo
all'inizio del commento. I commenti così delimitati possono occupare la sola riga corrente. Ecco il nostro programma "hello, world", corredato di commenti:
Se compilato, questo codice produrrà esattamente lo stesso file eseguibile. Le righe 2 e 3 del primo commento iniziano con un asterisco, solo per evidenziare che il commento si estende per quattro righe. Gli asterischi iniziali, ovviamente, non sono necessari. Nel nostro ultimo esempio, abbiamo definito una sola funzione. Per aggiungere un'altra funzione, è necessario, in genere, fare due cose: innanzitutto, definire la funzione, proprio come abbiamo fatto con la funzione
In questo esempio, abbiamo la funzione Non è necessario scrivere un intero programma in un unico file. E' possibile distribuirlo su un qualsiasi numero di file. Se un programma comprende 40 funzioni, per esempio, sarebbe anche possibile scrivere ogni funzione in un singolo file separato. Questo sarebbe un pochino estremo, ovviamente. Spesso, le funzioni vengono raggruppate per argomento, dedicando a ciascun argomento un file separato. Immaginiamo di dover scrivere un programma che calcola il prezzo di una pizza, stampando a terminale il risultato. Potreste inserire le funzioni di calcolo in un file, le funzioni di stampa in un altro file e la funzione
Ricordate che se definite una funzione nel file
e non tra parentesi angolari:
Per illustrare tutti questi concetti, scriveremo il programma per le pizze, di cui abbiamo appena parlato. Nota: i file header contengono solo le dichiarazioni delle funzioni, non le definizioni. Una dichiarazione di funzione, senza la relativa definizione, non sarà di alcuna utilità. Normalmente, la definizione di una funzione, la cui dichiarazione si trova in un file header, è reperibile in una libreria di sistema, che viene automaticamente linkata al nostro programma, in fase di compilazione. La libreria, quindi, conterrà sia i file header, con le dichiarazioni delle funzioni, sia i file precompilati con le definizioni delle funzioni appena dichiarate nei file header. Un ( non ) programma più complesso Il codice di programmazione, davvero limitato, che abbiamo usato fino ad ora, non è sufficiente per creare un programma interattivo decente. Per rendere la cosa più semplice, scriveremo, ora, giusto lo scheletro di un programma, in modo da mostrarvi la struttura e l'uso dei file header, senza rimanere impantanati in concetti nuovi. Nel capitolo 3, invece, scriveremo la versione completa di questo programma. Il codice di questo nuovo programma potrà essere compilato ed eseguito, ma non prevede la richiesta di immissione di dati, all'utente, e non effettua alcun calcolo del prezzo. Innanzitutto, abbiamo il file
che contiene solo la funzione
visto che il programma
che contiene la definizione di due funzioni, invocate dalla funzione
Infine, abbiamo il file
che contiene le funzioni per ottenere alcuni dati dall'utente ( input ) e per calcolare il costo totale della pizza. Solo una di queste funzioni viene invocata da
Per compilare questo intero programma, usare il comando:
Quando eseguito, il programma stamperà a video un saluto ed il prezzo della pizza: "£0.00". Gli argomenti trattati fino a qui non dovrebbereo essere particolarmente difficili. Se amate la sperimentazione, provate a scrivere programmi simili, che restituiscano, come output, solo poche righe. Dividete il vostro programma in un paio di funzioni e in un paio di file. Attivate sempre gli avvisi GCC, in fase di compilazione del programma. Un avviso indica che il vostro codice è poco chiaro, oppure incompleto. GCC tenterà di indovinare il significato corretto, e normalmente ci azzeccherà, ma non fate troppo affidamento su questo. Leggere gli avvisi e correggere il codice vi aiuterà a meglio padroneggiare il linguaggio. La gran parte degli avvisi, poi, sono accompagnati dal numero di riga in cui GCC ha trovato il problema. Se alla riga indicata non trovate alcun errore, provate con la riga precedente; se un costrutto è incompleto, GCC non nota l'errore fino a quando non incontra il costrutto successivo. Non dimenticate il punto e virgola.
|
||||
Learning GNU C: le funzioni | Disclaimer: this link points to content provided by other sites. |