Appunti sulle funzioni
La seguente non è una trattazione completa delle funzioni in C: sono solo degli aspetti che il professore ha ritenuto opportuno sottolineare, durante la trattazione delle funzioni.
- è possibile invocare più volte una stessa funzione
- è possibile invocare una funzione all’interno di altre funzioni (non soltanto nel main!)
- Quando una funzione è invocata, essa riceve una copia dei parametri con cui essa è stata invocata. (Discuti bene riguardo alle conseguenze di questa scelta)
- una funzione può restituire nessun valore (ad esempio, la funzione può avere come scopo la produzione di un certo output, anziché il calcolo di un valore da restituire). In tal caso, il tipo restituito dalla funzione dev’essere
void - per ciascun parametro di una funzione, è necessario specificarne il tipo
- per ciascuna funzione, è necessario specificare il tipo del valore restituito. Nel linguaggio C, una funzione non può restituire come valore un vettore (anche le stringhe, essendo vettori - di caratteri -, non possono essere valori restituiti da funzioni)
- quando una funzione è invocata, è obbligatorio che il nome della funzione sia seguito da una coppia di parentesi tonde, anche quando la funzione è priva di parametri.
- prima del
main(), deve esserci la dichiarazione - o segnatura - della funzione. Dopo ilmain(), deve esserci la definizione - o implementazione - della funzione.
Procedure
In C si parla sempre di funzioni; tuttavia, una funzione che non restituisce alcun valore (cioè con tipo di ritorno void) viene informalmente chiamata procedura.
In una funzione void, la parola chiave return può essere usata, ma senza restituire alcun valore (return;), ad esempio per terminare anticipatamente la funzione.
Esempio:
void stampa_numeri(int n);
La funzione stampa_numeri mostra in output, uno per riga, i numeri da 1 a n. Essa è chiaramente una procedura, poiché la sua segnatura inizia con void. Un esempio della sua implementazione:
void stampa_numeri(int n) {
if (n <= 0) return; // perfettamente valido
for (int i = 1; i <= n; i++)
printf("%d\n", i);
}
Vettori come parametri di funzioni
Una funzione può ricevere uno o più vettori come parametri.
In questo caso:
- il nome del vettore è seguito da parentesi quadre (es.
v[]); - è necessario passare anche la lunghezza del vettore, poiché la funzione non può determinarla automaticamente.
Esempio:
int f(int v[], int len);