La dichiarazione di una funzione in C

Nel linguaggio C posso dichiarare una funzione interna seguendo questa sintassi:

formato-vdr nome-funzione ( parametri )
{
codice
return vdr
}

Dove il formato-vdr è il formato del valore di ritorno (int, char, ecc.) che la funzione restituisce con l'istruzione return alla fine dell'esecuzione.

Nota. Se non indico il formato del valore di ritorno all'inizio della funzione, il programma considera di default il formato intero (int).

Il nome della funzione è seguito da due parentesi tonde in cui elenco gli eventuali parametri che voglio passare in input alla funzione.

Nota. Le parentesi tonde vanno indicate anche se la funzione non prevede parametri in input.

Il codice sorgente della funzione va indicato tra le due parentesi graffe.

L'istruzione return restituisce al programma il valore di ritorno.

Un esempio pratico

In questo programma definisco una funzione per calcolare la media aritmetica.

La dichiarazione della funzione è compresa nelle righe 2-6 del codice sorgente.

  1. #include <stdio.h>
  2. double media(float n1,float n2) {
  3. double m;
  4. m=(n1+n2)/2;
  5. return m;
  6. }
  7. int main()
  8. {
  9. double a,b,c;
  10. a=2;
  11. b=5;
  12. c=media(a,b);
  13. printf("La media è %f",c);
  14. return 0;
  15. }

Nella riga 2 definisco il formato del valore di ritorno (double), il nome della funzione (media) e i parametri che la funzione riceve in input, ossia due numeri in virgola mobile (float n1 e n2).

Nelle righe 3-4 della funzione dichiaro una variabile locale m dove registro la media aritmetica dei due valori n1 e n2.

Nella riga 5 l'istruzione return m restituisce al programma il valore di ritorno, il contenuto della variabile locale m.

Nota. La definizione della funzione va scritta all'inizio del programma. Non viene però eseguita fin quando non riceve una chiamata.

Nella riga 12 del programma aggiungo una chiamata alla funzione.

Quando il programma incontra la chiamata, sospende l'esecuzione del programma main per eseguire la funzione media().

In questo caso la chiamata passa alla funzione due valori numerici in input (a e b).

il passaggio dei parametri e la funzione di ritorno

Al termine dell'esecuzione della funzione media(), il controllo torna al programma main().

Il programma main() riceve il valore di ritorno (la media) e lo assegna alla variabile c.

Infine stampa il risultato a video.

La media è 3.500000

E' un semplice esempio di utilizzo delle funzioni in un programma scritto in C.

Esempio 2

In questo codice ci sono due chiamate alla funzione.

  1. #include <stdio.h>
  2. double media(float n1,float n2) {
  3. double m;
  4. m=(n1+n2)/2;
  5. return m;
  6. }
  7. int main()
  8. {
  9. double c;
  10. c=media(2,5);
  11. printf("La media è %f \n",c);
  12. c=media(4,6);
  13. printf("La media è %f \n",c);
  14. return 0;
  15. }

Il codice sorgente della funzione viene eseguito due volte.

La media è 3.500000
La media è 5.000000

Questo secondo esempio rende più evidente il vantaggio dell'utilizzo delle funzioni.

Per calcolare la media il programma usa lo stesso blocco di codice.

Il valore di ritorno

Una funzione restituisce al programma chiamante un valore di ritorno tramite la parola chiave return.

Se l'istruzione return non è presente, la funzione viene comunque eseguita senza restituire un valore di ritorno.

E' il caso delle funzioni void.

  1. #include <stdio.h>
  2. void funzione() {
  3. printf("1] Si \n");
  4. printf("2] No \n");
  5. }
  6. int main()
  7. {
  8. funzione();
  9. return 0;
  10. }

Le funzioni void sono utili per richiamare una procedura da più punti del programma principale.

Ad esempio, per la stampa di un menù di scelta.

Nota. Il programma chiamante può, in ogni caso, ignorare il valore di ritorno di una funzione anche se viene inviato.

A cosa servono le funzioni

I principali vantaggi delle funzioni sono

  1. Lo stesso blocco di codice è riutilizzato più volte
    Quando un blocco di istruzioni (routine) viene usato due o più volte in un programma, è meglio trasformarlo in una funzione. In questo modo posso richiamare la routine da qualsiasi punto del programma tramite una chiamata di funzione, senza dover ripetere ogni volta lo stesso blocco di codice.
  2. Migliora la leggibilità del codice.
    Grazie alle funzioni la lunghezza del codice sorgente si riduce. Diventa molto più semplice capire il funzionamento di un programma.
  3. Migliore gestione della memoria
    Un altro vantaggio delle funzioni è la minore complessità spaziale ( memoria allocata dal programma ) del programma perché la memoria allocata per le variabili delle funzioni non è la stessa del programma. Le funzioni usano variabili locali (o autmatiche) indipendenti da quelle del programma. Una volta terminata l'esecuzione della funzione, gli indirizzi di memoria occupati dalle variabili locali vengono liberati. In questo modo non si appesantisce la memoria allocata dal programma.

    Nota. Nell'esempio precedente l'indirizzo di memoria usato per la variabile m della funzione viene liberato ogni volta che la funzione termina l'esecuzione.

E così via

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Libri di approfondimento

Le funzioni in C