Alla luce di quanto esposto nel precedente articolo, vediamo come si procede, in C, nell'utilizzo di funzioni.

In C, i moduli prendono il nome di FUNZIONI. I programmi in C, tipicamente, combinano le funzioni predefinite del linguaggio (presenti nelle librerie standard) con quelle che il programmatore può crearsi autonomamente.

Le funzioni sono invocate da una chiamata di funzione. Questa consiste nel nome della funzione che viene invocata, seguita dagli ARGOMENTI, racchiusi tra parentesi tonde. Gli argomenti sono i dati di cui la funzione ha bisogno per svolgere il proprio compito.
Ad esempio, la funzione printf ha il compito di stampare su video dati che vengono passati come argomenti alla funzione:

printf("ciao");

La stringa "ciao" è un argomento passato alla funzione printf, che questa utilizza per i propri scopi (ovvero, stampa su video).

Esaminiamo ora un'altra caratteristica: le funzioni possono RITORNARE UN VALORE. Vale a dire, quando la funzione viene invocata, essa restituisce un valore, che essa ha calcolato in funzione degli argomenti. Il valore di ritorno può essere assegnato ad una variabile o valutato in una espressione o, addirittura, passato come argomento a una funzione.
Per chiarire il concetto con un esempio, riprendiamo la funzione printf. Forse non tutti sanno che questa è una funzione che restituisce un valore: più precisamente, restituisce il numero di caratteri stampati su video. Così, l'assegnazione

num_car = printf("ciao");

con num_car dichiarata variabile intera, fa sì che a num_car venga assegnato il valore 4.
Parimenti, è lecito scrivere la seguente porzione di codice:

if(printf("ciao") > 10)
    printf("Sono stati stampati più di 10 caratteri.");
else
    printf("Sono stati stampati al più 10 caratteri.");

che provoca la chiamata della funzione printf, con conseguente stampa su video della stringa "ciao", ne valuta il valore di ritorno nella struttura di selezione if e agisce di conseguenza.

La funzione printf, così come tutte le altre funzioni standard del C, sono contenute in file di intestazione. Quando si ha la necessità di usare una determinata funzione, occorre conoscere in quale file di intestazione essa è contenuta, per poi includere tale file nel sorgente del mio programma.
Ipotizziamo che in un mio programma io debba richiamare la funzione printf: essa è contenuta nel file di intestazione stdio.h, che devo dunque includere con una direttiva al preprocessore:

#include <stdio.h>


CONCLUSIONI
-----------
In questo articolo abbiamo analizzato lo scheletro delle funzioni, ovvero come si gestisce una chiamata di funzione e l'eventuale valore che questa ritorna.

Vi è un'ultima cosa da conoscere: quando vi è la necessità di una determinata funzione, in generale è preferibile sfruttare la libreria standard del C, per alcuni validi motivi:
- innanzitutto, per risparmiare del tempo, che potrà invece essere investito altrove;
- per assicurare una corretta implementazione;
- per rendere più portabili i programmi;
- per facilitare la comprensione del sorgente da parte di altri programmatori.
Bisogna però tener presente che la libreria standard non offre tutte le funzioni di cui un programmatore potrebbe aver bisogno: nasce dunque la necessità di costruirsi le proprie funzioni. Nel prossimo articolo vedremo come.