C/Blocchi e funzioni/Funzioni

Wikibooks, manuali e libri di testo liberi.

[modifica] Sintassi

Le funzioni in C si dichiarano in questo modo:

 tipo_restituito nomeDellaFunzione(tipo1 par1, tipo2 par2,..., tipoN parN)
 {
  istruzione1;
  istruzione2;
  istruzioneN;
 
  return valoreDaRestituire;
 }

Se il tipo di valore da restituire è void, indica che non viene restituito nessun valore.

In questo caso l'istruzione return è facoltativa. Può servire per un'uscita prematura, cioè per terminare la funzione prima di giungere alla fine.

Se la funzione è stata dichiarata per restituire void, essa non restituirà alcun valore: l'istruzione return delle funzioni che rendono un void non ammette parametri.

La parentesi aperta subito seguita da quella chiusa indica che alla funzione non sono passati parametri. I vecchi compilatori C non accettano una parentesi aperta e una chiusa con niente in mezzo per indicare che non si restituiscono parametri: per ottenere ciò si deve indicare fra le parentesi void.

Esempio:

 int main ()
 {
  int a;
  a=doubleof(2);
  printf("%d", a);
  return 0;
 }
 
 int doubleof(int x)
 {
  return x*2;
 }

Questo piccolo programma stamperà 4. main è la funzione principale che viene chiamata all'avvio del programma.

[modifica] Funzioni e puntatori

Se ad una funzione viene passato un puntatore, essa sarà in grado di modificare il valore puntato dal puntatore. Per esempio:

 int main ()
 {
  int a=2;
  doubleof(&a);
  printf("%d", a);
  return 0;
 }
 
 void doubleof(int *x)
 {
  * x = (* x) * 2;
 }

Questa piccola applicazione stamperà 4. Ecco come:

  1. int a=2; Questa istruzione dichiara una variabile intera a e la inizializza con il valore 2.
  2. doubleof(&a); Chiama la funzione doubleof, passandole l'indirizzo della variabile a.
  3. Dentro doubleof viene eseguita l'istruzione * x = (* x) * 2;, che assegna alla variabile puntata da x (a) il valore della stessa variabile puntata da x moltiplicato per 2.
  4. printf("%d", a); Stampa il valore ottenuto.

Se invece il nostro programma fosse stato così, avrebbe restituito 2.

 int main ()
 {
  int a=2;
  doubleof(a);
  printf("%d", a);
  return 0;
 }
 
 void doubleof(int x)
 {
  x = x*2;
 }

Per una maggiore comprensione di questo paragrafo, e per una descrizione dei puntatori a funzione, si consiglia la lettura della sezione dedicata ai puntatori.

Strumenti personali
Altre lingue