Domanda 1)

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)

 

Indietro