come funziona void

@nid69ita
Quanti ricordi che tornano alla mente, chissà perché le funzioni C mi sembrano molto più naturali rispetto a quelle del GWBasic.

@Etem
Con la tua competenza in elettronica, se imparassi quello che so io di informatica e programmazione ecc non avresti limiti.

Con il C può aiutare sapere cosa accade quando viene chiamata una funzione. Visto che il C è un linguaggio
compilato il compilatore si deve inventare un modo per realizzare il concetto di funzione.
Lo stak è un area di memoria dove ogni dato è simile ad un piatto, più piatti una pila di piatti.
Il primo piatto posato sul tavolo, il secondo sul primo, il terzo sul secondo e così via.
Questa pila è nota anche con il nome di "lifo" Last input, first output appunto come una pila di piatti, dove
l'ultimo piatto posato prima o poi e destinato a essere preso prima di tutti gli altri.

Una funzione non esiste in assembly, si risolve mettendo i parametri nello stack e saltando ad eseguire codice all'indirizzo in cui c'è il codice della funzione, per cui a quel codice ci deve essere anche una porzione di codice aggiunta dal compilatore per leggere i parametri prendendoli appunto dallo stack. Occhio che prenderli deve essere inteso letteralmente, per cui preso un dato dallo stack verrà messo da qualche parte (es registro CPU) e il dato nello stack non c'è più. Se la funzione deve restituire un valore, il codice allora deve spingere il dato di ritorno nello stack e poi saltare all'indirizzo seguente a quello in cui è avvenuta la chiamata.

Ora non ricordo l'ordine dei dati messi nello stack, ma anche l'indirizzo di ritorno deve stare nello stack, diversamente la funzione non saprebbe l'indirizzo da eseguire al termine della funzione stessa.

Per cui una funzione void, costa meno di una non void che deve spingere il dato nello stack.
Il compilatore per fare la traduzione del codice C in assembly ha di bisogno di queste informazioni.

PS: L'istruzione "return" in una funzione void può essere usato per uscire da una funzione prematuramente, cioè
cose del tipo: if (pointer == NULL) return; e pointer potrebbe essere un argomento a cui la funzione accede, per cui se pointer non punta a nulla è inutile (pericoloso) continuare l'esecuzione.

Ciao.