L'istruzione return quando e' richiesta nelle funzioni?
Risposta 1)
L'istruzione return e' opzionale per le funzioni void ed e' sempre richiesta per tutte le altre.
Quando non presente nelle funzioni void, il return e' rappresentato dalla } finale presente nella funzione.
Notare che nelle funzioni void, la return non deve essere seguita da nessun valore .
ossia e' scorretto scrivere return(0);
e' corretto scrivere return;
la return(espressione); e' valida per le funzioni che non sono di tipo void.
In tal caso espressione deve essere dello stesso tipo che precede il nome della funzione nella sua definizione.
Domanda 2)
Non ho ben compreso il significato di dichiarazione e definizione di una funzione in C?
Risposta
2)
la dichiarazione di una funzione
corrisponde alla notificazione dell'esistenza di quella funzione nel
programma.
per dichiarare una funzione bisogna specificare:
- nome funzione
- tipo del risultato
- numero e tipo dei parametri
(opzionalmente si puņ scrivere anche il
nome dei parametri)
in sostanza la dichiarazione di una
funzione e' quello che chiamiamo prototipo della funzione.
esempio di dichiarazione o prototipo di una funzione:
int fattoriale(int);
oppure opzionalmente int
fattoriale(int x);
mentre la definizione
di una funzione e' la parte di software in cui la funzione e' completamente
implementata
esempio:
int fattoriale(int x)
{ int b=1;
while (x>0) {
b =b*x;
x--;
}
}
Domanda 3)
In che modo posso utilizzare una funzione in un programma C?
Risposta 3)
In un programma C, per poter usare
una funzione, bisogna che la funzione sia stata dichiarata o definita
prima del punto in cui la si usa.
Prendiamo un caso frequente:
la funzione principale main fa uso della funzione di nome funz
possiamo definire funz sia prima che dopo main, ma se la definiamo dopo,
bisogna che prima di main
vi sia la dichiarazione di funz .
---------------
dichiarazione funz
int main() {
...
/*uso di funz (che e' nota perche' gia' dichiarata)*/
...
}
definizione di funz
---------------
invece se definiamo prima funz e poi main, non serve la dichiarazione
---------------
definizione di funz
int main() {
...
uso di funz (che e' nota perche' gia' definita)
...
return 0;
}
---------------
quando il compilatore incontra una chiamata di funzione ...funz(x,y)... vede
se la funzione e' stata gia' dichiarata
in modo che sia possibile usarla cosi' (nome funzione, tipo risultato
adatto all'uso, due parametri del tipo giusto)
se trova la dichiarazione o la definizione prima, allora tutto bene
se non trova niente prima, assume che la funzione sia intera con parametri
interi e cerca di proseguire
(ecco perche' certe volte va tutto bene anche se abbiamo trascurato di mettere
la dichiarazione - l'assunzione di funzione intera di parametri interi e'
sufficiente a far procedere le cose da sole)
se le cose vanno male, viene dato un errore di link
(hai chiamato una funzione che non e' conosciuta in questo punto del
programma)