Transcription of Linguaggio C: Funzioni
1 Macroareadi IngegneriaDipartimento di Ingegneria Civile e Ingegneria InformaticaLinguaggio C: FunzioniValeria CardelliniCorsodi 2019/20 Funzioni in CqDefinizione di funzioniqPassaggio dei parametriqEsecuzione di una funzioneqVariabili dichiarate in una funzione e visibilit qGestione della memoria su chiamate di funzioniValeria Cardellini -CE 2019/201 Funzioni in CqPer progettare un programma complesso lo si suddivide in un insieme di componenti pi piccoli ed indipendenti (divide ed impera) Astrazione sui dati e astrazione funzionaleqIn C l'astrazione funzionale si realizza attraverso la nozione di funzioneqFunzione: viene chiamata da un altro modulo di programma (maino altra funzione) per svolgere una specifica operazioneqOltre a compiere una serie di azioni, la funzione comunica con l'ambiente chiamante.
2 Ricevendo in ingresso una lista di parametri di input (o argomenti) Restituendo, quando termina, un parametro di outputValeria Cardellini -CE 2019/202 Funzioni in CqUn programma in C un insieme di funzioniqOgni funzione prende in ingresso una lista di argomenti e restituisce un valoreqIn un programma deve esserci sempre la funzione principalemain() Finora negli esempi funzione main()e qualche funzione di libreria (ad es. input/ouputin #include < >)qCome si definiscono le Funzioni ?qCome si usano le Funzioni (chiamata o attivazione di funzione)?
3 Valeria Cardellini -CE 2019/203 Dichiarazione di Funzioni in CqCome le variabili che devono essere dichiarate prima di poter essere usate, anche le Funzioni necessitano della dichiarazioneqLa dichiarazione di una funzione deve specificare: Il nomedella funzione: identificatore che ne permette l utilizzo nel programma Gli argomenti(parametri di input) della funzione: quantit e tipo dei valori forniti in ingresso Il tipo del valore in uscita (parametro di output) qSono ammesse Funzioni senza parametri di input e/o di outputValeria Cardellini -CE 2019/204funzioneparametridi inputparametrodi outputEsempi: dichiarazioni di Funzioni in CqEsempi di prototipi di funzioniintfattoriale(int);oppureintfatt oriale(intn);intmcd(int, int);oppureintmcd(inta, intb);intfunc(void);voidstampa_ris(doubl e, int);oppurevoidstampa_ris(double r, inta).
4 QPrototipo di funzione Il nome dei parametri di input pu essere incluso nel prototipo per documentare meglio il codice, comunque sar ignorato dal compilatoreValeria Cardellini -CE 2019/205 Definizione di funzione in CtipoRisultatonomeFunzione(parametriForm ali){istruzioni}qIntestazione e corpo della funzione tipoRisultato: tipo del risultato restituito dalla funzione (es., int, double) oppure voidse la funzione non restituisce risultato nomeFunzione: nome della funzione parametriFormali: lista (eventualmente vuota) di dichiarazioni di parametri (coppie tipo e nome) separate da , Se vuotapu essereindicatacon void istruzioni: corpo della funzione contenente le istruzioni da eseguire alla chiamata della funzione stessaValeria Cardellini -CE 2019/206 Esempio: funzione in C#include< >intsquare(int);/* dichiarazione di funzione (o prototipo) */intmain(void) {inti.}
5 For (i=1; i<=10; i++)printf( Il quadrato di %d %d\n , i, square(i)); /* chiamata di funzione */return0;}intsquare(inty) {/* definizione di funzione */intr= y*y;returnr;/* alternativa pi compatta: returny*y;}Valeria Cardellini -CE 2019/207 Codicesorgente: : returnqSintassireturnespressione; espressione: un espressione il cui valore deve essere compatibile con il tipo del risultato dichiarato nell intestazione della funzioneqSemantica L istruzione returneseguita all interno di una funzione functermina l esecuzione della stessa e restituisce il risultato nel punto del programma dove stata invocata funcqEsempiointmain(void) {.
6 Return0;/* 0 indica la terminazione normale */}Valeria Cardellini -CE 2019/208 Istruzione returnqL'esecuzione dell'istruzione returncomporta la terminazione della funzione, anche se ci sono altre istruzioni che seguonoqSe il tipo del parametro di output di una funzione void, allora returnsi pu omettere, a meno che non si desideri interrompere l'esecuzione Esempio: return;qSe viene omesso returne la funzione restituisce un risultato diverso da void, si ha un warningdel compilatore warning: control reaches end of non-void functionValeria Cardellini -CE 2019/209 Codicesorgente: di funzioniqLe Funzioni vengono chiamate(attivate) all interno di altre funzioniinta, b, m.
7 A = 1; b = 2;m = max(a, b);qSintassi per la chiamata di funzioniidentificatore(parametriAttuali) identificatore: nome della funzione parametriAttuali: lista di espressioni separate da ,qI parametri attuali devono corrisponderein numero, posizionee tipoai paramenti formali Errore: #parametriattuali< #parametriformalierror: too few arguments to function callValeria Cardellini -CE 2019/2010 Coercizione degli argomentiqUna chiamata di funzione non corrispondente al prototipo provoca un errore di sintassiqIn alcuni casi sono tollerate chiamate con tipi diversi: coercizione degli argomentiqEs.
8 : sqrtha come argomento un double, per :intx = 4;printf( %lf , sqrt(x)); stampa Il compilatore promuove 4 a e quindi la funzione viene chiamata correttamenteqLe conversioni avvengono secondo le regole di promozione del C gi esaminateValeria Cardellini -CE 2019/2011 Attivazione di funzioniqSemantica dell attivazione di una funzione g nella funzione f L attivazione di una funzione un espressione Quando viene attivata g in f: viene sospesa l esecuzione di fe si passa ad eseguire le istruzioni di g (a partire dalla prima) quando termina l esecuzione di g, si torna ad eseguire le istruzioni di fqPrima di poter essere chiamata, una funzione deve essere stata dichiarata oppure definita sopraqVedi esempiValeria Cardellini -CE 2019/2012 Codicesorgente.
9 Di funzioniqIn C non possibile definire Funzioni all interno di funzioniqPrima di essere chiamata una funzione deve essere definita o dichiarata Il compilatore deve controllare che i parametri formali corrispondano (per numero e tipo) ai parametri attualiqPrima dell attivazione deve essere conosciuto il prototipo Se la funzione non definita, almeno deve essere gi dichiarataqE pratica comune usare quest di tutte le Funzioni tranne di di tutte le altre funzioniValeria Cardellini -CE 2019/2013 File header (o intestazioni)qOgni libreria standard ha un corrispondente file headercontenente: definizioni di costanti definizioni di tipo dichiarazioni di tutte le Funzioni della libreriaqEsempi: < >: input/output < >.
10 Memoria, numeri casuali, utilit generali < >: manipolazione di stringhe < >: limiti del sistema per valori interi < >: limiti del sistema per valori reali < >: Funzioni matematicheqIl programmatore pu scrivere una libreria e definire il corrispondente file headerValeria Cardellini -CE 2019/2014 Passaggio dei parametriqLa definizione di una funzione presenta nell intestazione una lista di parametri formaliqQuesti parametri sono utilizzati come variabili all interno del corpo della funzione La chiamata di una funzione contiene i parametri da utilizzare come argomenti della funzione stessa Questi parametri sono detti parametri attuali.