Funzioni C/C++
Sottofunzioni
Tipo
Sottoprogrammi
E' quella parte del programma che risolve un sottoproblema
I Sottoprogrammi restituiscono un valore di un tipo(tranne Void, Array e quelli "derivati" dal tipo vettore)
I sottoprogrammi che restituiscono un valore booleano vengono detti Predicati
Procedure
Le procedure, a differenza dei sottoprogrammi, non restituiscono un risultato
Le procedure sono di tipo Void
Passaggio di parametri
Valore
Quando un passaggio avviene per valore significa che vogliamo sfruttare il valore di una variabile senza correre il rischio di modificarla
Viene usata per i parametri di ingresso
Un esempio di parametro passato per valore può essere il risultato di un operazione che andiamo a stampare a video con una procedura
Per passare un tipo Array(o anche un qualunque tipo derivato da esso) per valore si deve inserire un "const" prima del tipo dell'Array
Riferimento (C++)
Il passaggio per riferimento esiste solo in C++(in C si dovevano obbligatoriamente sfruttare i Puntatori)
Per passare per riferimento una variabile e non per valore basta aggiungere una & dopo il tipo della variabile
Il Passaggio per riferimento viene usato per Parametri d'uscita
Il passaggio per riferimento viene usato anche nelle procedure che se no non potrebbero "salvare" le azioni che eseguono
Nel passaggio per riferimento viene passato l'indirizzo di memoria della variabile e non il suo valore
I Tipi composti legati all'array(vettori, matrici, stringhe, vettori a tre dimensioni ecc...) vengono passati automaticamente per riferimento
Prototipo
Il Prototipo di una funzione assegna il nome alla suddetta e un tipo ai suoi parametri
Es.int Nome_funzione(int,int,int);
Il Prototipo è indispensabile se la funzione chiamante non è il Main
Il Prototipo va messo sopra il Main in un programma "Monolitico" o nel file .h della libreria nel caso della compilazione separata
Definizione
La definizione di una funzione contiene tutte le informazioni riguardanti i parametri formali e il tipo di questi ultimi
Es. int Nome_funzione(int a, int b, int c){/*Svolgimento*/}
Specifica cosa la funzione deve fare
La definizione va sopra o sotto il main nel caso di un programma "Monolitico" o nel file .cpp della libreria nel caso della compilazione separata
Se manca il prototipo va messo per forza sopra al Main
Chiamata
Una funzione può essere chiamata, anche più volte, in diversi punti del programma
Nella chiamata vanno indicati solo il nome della funzione e i parametri effettivi
Es. Nome_funzione(a,b,c);
Parametri
Parametri Effettivi
Sono i parametri dati dal main
Parametri Formali
Sono i Parametri usati dalla funzione
Possono coincidere con quelli formali ma non è necessario
è importante però l'ordine
Se scriviamo nella chiamata (a,c,b) e nella funzione (a,b,c) i calcoli(o le azioni legate) che dovevano essere svolti su c verranno eseguiti su b (e viceversa)
Possono essere di Uscita, di Ingresso o una soluzione mista Ingresso/Uscita
Possiamo capire il "tipo" del parametro dal passaggio scelto
il Main
Il Main è una funzione che deve essere sempre presente in un programma C/C++
La prima istruzione ad essere eseguita è sempre la prima del main(anche se ci sono diversi sottoprogrammi)
Il Main viene usato di tipo int per la convenzione legata al Return
La funzione Main può essere usata senza parametri
Il "Return"
Il return serve per far restituire ad un sottoprogramma un valore
Non possono esserci più return in una sola funzione(senza usare costrutti selettivi con return nei vari "bracci"
Per convenzione si usa Return 0 per indicare che una funzione ha raggiunto la sua fine "senza errori"
Per convenzione si usa Return 1 per indicare che il programma si è arrestato non in modo corretto per via di un errore