C – Le funzioni
- Definizione
- Dichiarazione di una funzione
- Variabili globali
- Funzioni che non restituiscono alcun valore
- Link utili
Definizione
Le funzioni, dette anche sottoprogrammi, sono aggregati di gruppi di istruzioni e si usano per evitare di ripetere porzioni di codice. Possiamo richiamare tante volte la funzione e quindi eseguire quel codice più volte avendo solo una porzione di quel codice.
Questo approccio è denominato programmazione modulare e lo sviluppatore dividerà in moduli i diversi task del proprio software. Si possono inoltre creare librerie da utilizzare in più programmi, e saranno analoghe a funzioni come lo strcmp
e lo strcpy
della libreria string.h.
Dichiarazione di una funzione
Per poter utilizzare una funzione dobbiamo dichiararla prima del main utilizzando il seguente prototyping
tipoRitorno nomeFunz (tipoPar1, …, tipoParN);
per esempio, una funzione che restituisce la somma tra due numeri interi si può definire nel seguente modo
int somma(int, int );
Il tipo restituito sarà un intero, il nome della funzione è somma e accetta come argomenti due valori interi .
Dopo il blocco main si deve definire la funzione somma
int somma(int a, int b){
return a+b;
}
i valori a e b su cui agisce la funzione sono detti parametri formali.
Nel seguente programma invochiamo la funzione somma
tre volte passando differenti valori interi
#include<stdio.h>
int somma(int, int );
int main(){
int c=3,d=4;
int res;
res=somma(c,d);
printf("La somma 1: %d\n",res);
res=somma(5,c);
printf("La somma 2: %d\n",res);
res=somma(c,c);
printf("La somma 2: %d\n",res);
return 0;
}
int somma(int a, int b){
return a+b;
}
Nota che ad ogni invocazione della funzione i parametri formali sono inizializzati con i valori corrispondenti dei parametri attuali nel primo caso c e d, nel secondo caso 5 e c e nel terzo caso c e c
Variabili globali
Quando si definisce una variabile globale cioè esterna sia al main che alle funzioni si può avere il passaggio implicito di parametri
#include<stdio.h>
char path[] = "documents/";
int strlength(void);
int main(){
printf("La stringa ha %d caratteri \n",strlength());
return 0;
}
int strlength(){
int res;
for(res=0;path[res]!='\0';res++);
return res;
}
Nota l’utilizzo del ; dopo il for, questo è necessario affinché non venga inteso il return come blocco del ciclo.
Funzioni che non restituiscono alcun valore
Nel caso la nostra funzione non restituisca nessun valore, nel linguaggio C abbiamo a disposizione il tipo speciale void
. Questo tipo di funzioni sono chiamate sink.
Creiamo una funzione che stampa i divisori di un numero intero, quindi non restituirà un valore ma stamperà una serie di valori.
#include<stdio.h>
void stampaDiv(int);
int main(){
int num;
do{
printf("Inserisci un numero \n");
scanf("%d",&num);
}while(num<=0);
stampaDiv(num);
}
void stampaDiv(int n){
int i;
for(i=0;i<=n;i++){
if(n%i==0){
printf("%d \t",i);
}
}
}
Link utili
Lezione sulle strutture di controllo
La mia repository GitHub con il materiale delle lezioni sul C