Corso di C con Linux

Funzioni e blocchi di funzione (I)

 

Un blocco di funzione è composto da uno o più blocchi di istruzioni e da istruzioni combinate in modo da svolgere un compito specifico.
Durante lo sviluppo dei programmi, istruzioni e blocchi di istruzioni vengono usati dalle funzioni per creare un singolo modulo, che si occupa di risolvere un singolo aspetto di un problema.
Esaminiamo la seguente funzione:

1: int area_triangolo(void)
2: {
3:   int base, area, altezza;
4:   base = 10;
5:   altezza = 5;
6:   area = (base * altezza) / 2;
7:   return area;
8: }

Ogni funzione ha una dichiarazione fatta in questo modo:

tipo_valore_restituito nome_funzione(tipo_parametri parametri);

La nostra funzione area_triangolo restituisce un valore di tipo int, ovvero un numero intero rappresentante l'area di un triangolo avente base 10.
Esaminiamo ora la linea 3, nella quale troviamo il modo per definire una variabile:

tipo_variabile nome_variabile;

Abbiamo già visto questa sintassi nell’esempio della lezione precedente per la dichiarazione della variabile a.
Se le variabili, come in questo caso, sono dello stesso tipo, allora basta utilizzare una notazione ridotta del tipo:

tipo_variabile nome_variabile1, nome_variabile2, nome_variabile3, ...;

Più avanti nel capitolo vedremo il significato dei tipi delle variabili.

Per comprendere il significato dell’istruzione return e del parametro void occorre sapere che una funzione in un linguaggio di programmazione ha un significato abbastanza simile alla matematica:

     f: A->B
Funzione da A in B

Una funzione riceve da altre funzioni un insieme A di valori e restituisce un insieme B di valori.
Nel caso in cui A sia vuoto (come nel nostro esempio) si specifica void nei parametri della funzione:

int area_triangolo(void)
                   ^^^^


Se è B ad essere vuoto, si specifica void prima della definizione della funzione e si omette l'istruzione return, ad es.:

void nome_funzione(void)
{
  int base;
  base = 0;
}

Nel caso in cui le nostre funzioni debbano restituire un valore, occorre dichiarare il tipo del valore che essa restituisce, come abbiamo fatto nella linea 1 della funzione:

int area_triangolo(void);

In questo caso occorre usare l'istruzione return prima di chiudere il blocco funzione per restituire il valore elaborato dalla nostra funzione.
A questo punto passiamo a scrivere un primo semplice programma, che chiameremo primo.c:

/* Primo programma in C */
#include <stdio.h>

int main(void) {
    printf("Ciao Mondo!\n");
    return 0;
}


La prima cosa che notiamo sono i simboli /* e */.
Il primo ha significa “Apri un commento” e il secondo “Chiudi il commento”.

Vediamone un ulteriore esempio:

/*
   Questo è un commento insensato:
   secondo voi, chi è più bella:
   Laetitia Casta, Cindy Crawford o Claudia Schiffer?
 */


Il compilatore ignora tutto ciò che trova tra /* e */.
Queste coppie di caratteri sono chiamate delimitatori di commento.
I commenti sono molto utili sia durante la stesura del codice, per ricordarci cosa fa il programma, sia nella fase di debug, per cui occorre molta cura nella loro scrittura, perché possono essere un valido aiuto per la comprensione e la scoperta dei bug.
Una cosa importante da notare è che ogni commento aperto con /* deve essere chiuso con */, infatti in ANSI C non è lecito scrivere commenti annidati di questo tipo:

/*
Il programma analizza
/* le derivate ennesime */
*/

 

Torna all'indice Generale del corso di Corso di C con Linux di Software Planet