Concetti Chiave
- L'invocazione di una funzione interrompe l'esecuzione della funzione esterna finché la funzione chiamata non termina.
- Una funzione ricorsiva invoca se stessa, e un ciclo infinito può causare il crash del programma per saturazione dello stack.
- Il valore di ritorno di una funzione viene gestito tramite l'istruzione return, che causa la terminazione della funzione e ritorna il controllo al chiamante.
- La visibilità di una funzione dipende da dove è dichiarata; una funzione interna è accessibile solo dalla funzione che la contiene.
- In C, i parametri vengono passati per valore, creando copie locali dei valori iniziali, modificabili solo tramite puntatori per alterare il valore originale.
Invocazione di funzione
L’invocazione o chiamata di funzione è un’operazione che permette alla funzione di essere eseguita. Quando una funzione viene chiamata nel corpo di un’altra funzione, l’esecuzione dell’ultima e sospesa, si passa all’esecuzione della prima, terminata questa si ripassa di nuovo alla funzione esterna. Una funzione che invoca se stessa viene chiamata funzione ricorsiva. Se usando una funzione ricorsiva si crea una sequenza inifinita di output, il programma prima o poi va in crash per saturazione dello stack.
Valore di ritorno di una funzione = la funzione ritorna o restituisce un valore tramite return.
L’istruzione return causa la terminazione della funzione e il ritorno del controllo al chiamante, il valore di ritorno può essere un’espressione, ma non possono essere più valori e una funzione.
L’espressione che indica il valore di ritorno può essere sia racchiuso tra () che no, indifferentemente.
Il valore di una funzione, al termine della funzione, viene salvata nella funzione() e il tipo di risultato deve coincidere con il tipo del valore di ritorno per evitare typecasting. Se non c’e coerenza tra tipo del valore di ritorno e il tipo del risultato della funzione, si applica la conversione implicita.
È sintatticamente possibile avere come tipo di valore di ritorno void, ma è poco pulito, questo valore viene ignorato. È anche permesso terminare una funzione non di tipo void ma senza il valore di ritorno, in questo caso il valore restituito non è predicibile, c’è quindi un comportamento non definito.
L’istruzione return causa sempre la terminazione della funzione nonostante ci sia codice sotto o meno.
La visibilità di una funzione dipende dal punto in cui essa e dichiarata o definita. Tutte le funzioni del file possono leggerla, se però l’invocazione segue la dichiarazione. Se la dichiarazione è visibile al momento della chiamata è possibile compiere controlli tra dichiarazione e definizione.
È possibile dichiarare, ma non definire una funzione all’interno di un’altra funzione. Quella interna sarà invocabile solo da tutte le istruzioni di quella in cui è contenuta.
Una funzione utilizza diversi parametri/argomenti:
- parametri formali, dichiarati nella dichiarazione e definizione
- parametri attuali, passati al momento della chiamata
In C il passaggio dei parametri avviene seguendo le modalità del passaggio per valore, quindi gli argomenti (parametri formali) sono variabili locali i cui valori iniziali (parametri attuali) sono passati alla funzione quando essa è invocata. La funzione non può modificare direttamente gli argomenti ma modifica solamente le copie, private e temporanee(passaggio per valore). È possibile modificare gli argomenti solo se si utilizzano i puntatori (passaggio per riferimento).
Il nome del parametro formale maschera le variabili con lo stesso nome esterne alla funzione.
Il valore del parametro formale può essere modificato nella funzione senza che abbia effetti all’esterno, ma questo non succede con scanf(), infatti riusciamo a modificare il valore di una variabile esterna.
Se il tipo di parametro attuale passato e diverso dal tipo di parametro formale si applica la conversione implicita.
Domande da interrogazione
- Che cos'è l'invocazione di funzione e come funziona?
- Cosa succede quando una funzione invoca se stessa?
- Qual è il ruolo dell'istruzione return in una funzione?
- Come avviene il passaggio dei parametri in C?
- Cosa accade se il tipo di parametro attuale è diverso dal tipo di parametro formale?
L'invocazione di funzione è l'operazione che permette l'esecuzione di una funzione. Quando una funzione viene chiamata all'interno di un'altra, l'esecuzione della funzione esterna è sospesa fino al termine della funzione chiamata.
Quando una funzione invoca se stessa, si tratta di una funzione ricorsiva. Se la ricorsione genera una sequenza infinita di output, il programma può andare in crash per saturazione dello stack.
L'istruzione return causa la terminazione della funzione e il ritorno del controllo al chiamante. Può restituire un valore, ma non più valori o una funzione.
In C, il passaggio dei parametri avviene per valore, il che significa che gli argomenti sono variabili locali e la funzione modifica solo le loro copie temporanee. La modifica diretta degli argomenti è possibile solo tramite puntatori.
Se il tipo di parametro attuale è diverso dal tipo di parametro formale, si applica la conversione implicita per adattare i tipi.