il linguaggio C permette di scomporre il codice in funzioni (subroutine o procedure) da poter riutilizzare in seguito anche più volte
le funzioni devono essere o:
- indicate come prototipo prima o all'interno della funzione principale main, a seconda se si vuole che la funzione sia globale o locale (come per le variabili), e poi definita in qualsiasi punto del codice al di fuori di altre funzioni
- definita prima della funzione principale main
sintassi:
prototipo
tipo valore restituito nome funzione(tipo nome_variabile_parametro, ...);
in caso non abbia argomenti passati, ma esegue solamente dei codici, tra le parentesi tonde deve avere la parola void:
tipo valore restituito nome funzione(void);
definizione
tipo valore restituito nome funzione(tipo nome_variabile_parametro, ...)
{istruzione1;
...
istruzioneN;
return valore_restituito;}
in caso non abbia argomenti passati, ma esegue solamente dei codici, tra le parentesi tonde deve avere la parola void:
tipo valore restituito nome funzione(void)
{istruzione1;
...
istruzioneN;
return valore_restituito;}
l'istruzione return non é necessaria se la funzione non restituisce nessun valore alla fine
parametri:
le variabili parametri utilizzate nella funzione prendono solo il valore dalle variabili passate dalla funzione di origine.
le variabili passate non saranno modificate nemmeno se hanno lo stesso nome, ad essere passato tra una funzione e l'altra sarà solo il valore, non l'indirizzo di memoria.
se si vuole invece intervenire sui valori effettivi delle variabili, e non su una copia, bisogna utilizzare i puntatori e passerà alla funzione l'indirizzo di memoria
{
nome_funzione(&nome_variabile); chiamata ed utilizzo della funzione con passaggio puntatore
...;
}
nome_funzione(tipo *nome_variabile); definizione della funzione con parametri dei puntatori
{
...;
}
esempio: funzione che inverte i valori delle funzioni con il gioco delle tre carte
#include <stdio.h>
void swap(int *apt, int *bpt)
{int temp;
temp = *apt;
*apt = *bpt;
*bpt = temp;
}
int main()
{int alfa = 5;
int beta = 13;
printf("alfa -> %d, beta -> %d\n", alfa, beta);
swap(&alfa, &beta);
printf("alfa -> %d, beta -> %d\n", alfa, beta);
}
richiamo della funzione:
per richiamare una funzione se ne scrive il nome seguito dai valori o variabili passate come parametri tra parentesi tonde: nome_funzione(... , ... , ...)
in caso la funzione non necessita di parametri si metteranno le parantesi tonde aperta e chiusa senza valori: nome_funzione()
esempio:
int somma (int primo, int secondo) prototipo e definizione
{return primo + secondo;}
void messaggio (void)
{printf("Il risultato é:\n");}
int main (void)
{int a, b, c;
a = b = 2;
c = somma (a, b);
messaggio(); richiamo una funzione void
printf ("%d",c);}