Example: bachelor of science

Linguaggio C: Funzioni

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: 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.)

Funzioni in C q Per progettare un programma complesso lo si suddivide in un insieme di componenti più piccoli ed indipendenti (divide ed impera) Astrazione sui dati e astrazione funzionale q In C l'astrazione funzionale si realizza attraverso la nozione di funzione q Funzione: viene chiamata da un altro modulo di programma (maino altra funzione) per svolgere

Information

Domain:

Source:

Link to this page:

Please notify us if you found a problem with this document:

Other abuse

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: 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.)

2 Input/ouputin #include < >)qCome si definiscono le Funzioni ?qCome si usano le Funzioni (chiamata o attivazione di funzione)?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).

3 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;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.

4 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) {..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.

5 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.: 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.

6 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 < >: 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, per distinguerli dai parametri formali presenti nell intestazione della definizione della funzioneqQuando, attraverso la chiamata, attiviamo una funzione, i parametri attuali vengono collegati (binding) ai parametri formaliqCome effettuare questo legame?

7 Valeria Cardellini -CE 2019/2015 Passaggio dei parametri: per valore e per riferimentoqEsaminiamo due tecniche per il passaggio dei parametriqPassaggio per valore(pass-by-value) All'atto della chiamata viene preparata una copiadei valori dei parametri attuali: la funzione opera sulla copia, mentre il valore dei parametri attuali non viene modificatoqPassaggio per riferimento(pass-by-reference) Alla funzione viene passato il riferimentoalle variabili che costituiscono i parametri attuali: la funzione opera direttamente su di esse e quindi pu modificarne il valoreqIl C prevede esplicitamentesolo il passaggio dei parametri per valore qEsistono anche altre tecniche (tra cui passaggio per copia/ripristino), non esaminateValeria Cardellini -CE 2019/2016 Passaggio dei parametri: una spiegazione informaleValeria Cardellini -CE 2019/2017 dei parametri per valoreqpa: parametro attuale presente nella chiamata della funzioneqpf.

8 Corrispondente parametro formale nella definizione della funzioneqAl momento del passaggio dei valutato pa(in generale, un'espressione) pfviene associata una locazione di locazione viene inizializzata al valore di paqDurante l esecuzione la funzione opera sui parametri formali, ovvero sulle locazioni a loro associate durante la chiamata, non modificando quindi il valore dei parametri attuali Valeria Cardellini -CE 2019/2018 Passaggio dei parametri per valoreqpfsi comporta come una variabile dichiarata all'interno della funzione e creata al momento di ciascuna chiamata della funzione La memoria allocata per pfsolo durante l'esecuzione della funzioneqAl termine dell'esecuzione della funzione, lo spazio di memoria allocato ai parametri formali viene deallocato e i valori dei parametri formali non sono pi accessibiliqI valori delle variabili nelle espressioni che costituiscono i parametri attuali non vengono alteratidurante l'esecuzione della funzioneValeria Cardellini -CE 2019/2019 Esempio.

9 Passaggio dei parametri per valore#include < >intraddoppia(int); /* Prototipo funzione */intmain(void) {inta, b;a = 5;b = raddoppia(a + 1);/* Chiamata funzione, a+1 parametro attuale */printf("a = %d b = %d\n", a, b);return0;}intraddoppia(intn) {/* Definizione funzione, nparametro formale */ returnn*2;}Valeria Cardellini -CE 2019/2020 Codicesorgente: iparametriattualia e b?Passaggio dei parametri per riferimentoqNel passaggio per riferimento il pfindicato come riferimento non , come nel passaggio per valore, una variabile locale inizializzata al valore del pa, ma un riferimento alla variabile originale (pa) nell ambiente della funzione chiamante pae pfsi riferiscono alla stessa locazione di memoriaqOgni modifica del parametro formale viene effettuata sul parametro attuale della funzione chiamante Le modifiche fatte dalla funzione chiamata si propagano alla funzione chiamanteValeria Cardellini -CE 2019/2021 Passaggio dei parametri per riferimentoqIl passaggio dei parametri per riferimento crea aliasing: il parametro formale un nuovo nome per una locazione di memoria gi esistente produce effetti collaterali.

10 Le modifiche fatte attraverso il parametro formale si ripercuotono all esterno qUna qualche forma di passaggio per riferimento esiste in molti linguaggi, anche se spesso simulato (nel caso del C tramite l uso dei puntatori) Valeria Cardellini -CE 2019/2022 Passaggio dei parametri in CqPerch il C adotta il passaggio per valore? una tecnica sicura: le variabili della funzione chiamante e della funzione chiamata sono completamente disaccoppiate e non ci sono effetti collaterali Gli effetti della chiamata sono espliciti e ben visibili: valore restituito e azioni dirette della funzione La funzione chiamata pu modificare il contenuto dei parametri formali, senza impatto sui valori dei parametri attuali nell ambiente della funzione chiamanteqIl passaggio dei parametri per valore presenta per delle limitazioni Superabili in C tramite i puntatori: passandoper valoreun puntatore, sipassain realt ilriferimentoa unavariabileValeria Cardellini -CE 2019/2023 Limiti del passaggio per valoreqIl passaggio per valore ha una semantica per copiaqLa comunicazione tra funzione chiamante e chiamata unidirezionale (da funzione chiamante a funzione chiamata), eccetto per il valore di ritornoqImpedisce a priori di scrivere una funzione che abbia come scopo quello di modificare i dati passati dalla funzione chiamanteqImpedisce di restituire alla funzione chiamante pi di un risultato Ad es.


Related search queries