come funziona void

No, non ci credo Etem che non sa programmare.
Pronto, pronto intervento? si dica.
Emet non sa programmare.
Provvediamo subito, una sacca...no meglio due di programmina, 200 cc di C. :grin:

Ok, niente di preoccupante, anche io sono passato per gwbasic, quickbasic e basic-7.1.

Il tipo void è necessario perché nelle vecchie versioni di C una funzione di base ritornava sempre un intero, e credo che ancora adesso sia così. Quindi void si usa per dire che la funzione che di default ritorna un intero non deve ritornare nulla. Il C ANSI, richiede anche "void" nella lista di argomenti di funzione quando questa è vuota.

void myFunc(void); // protoype

void myFunc(void) 
{
     // Questo è un blocco di codice legato ad un nome di funzione richiamabile.
}
int yourFunc(void)
{
      // il puntatore PC e qui, non puoi decidere in anticipo cosa accadrà quando la funzione termina.
      // anche perché qui siamo in contesto locale dove le variabili create qui dentro vengono distrutte
      // al termine della funzione.
      int i = 0;
      return i;  // ritorna i, al chiamante e poi la variabile locale i viene distrutta
}

Occhio che viene creata una copia della variabile i e ritornata al chiamante, la copia rimane nello stack del contesto chiamante e viene distrutta nel contesto della funzione.

Immagina cosa accade se al posto di restituire un tipo "int", restituissi un tipo utente, come ad esempio
un oggetto String. Ci vuole più tempo a creare una copia di un oggetto "String" che un oggetto di tipo "int".
Un ogetto String è instanza oggetto di classe String. Nel caso di "int", un oggetto int è instanza oggetto di tipo predefinito fornito dal linguaggio di programmazione. Questa spiegazione è più orientata alla programmazione
ad oggetti e prima che venisse creato il C++ i programmatori C avrebbero detto che myInt è una variabile di tipo int.

Anche gli argomenti (anche detti parametri) di una funzione sono locali al contesto della funzione, perché di default il passaggio di parametri viene effettuato per valore, per cui viene creata una copia della variabile usata come parametro che ha il valore che nella chiamata hai specificato.

void myFunc(int x) 
{
     // viene creata una variabile "x" locale a cui gli viene assegnato il valore che nella chiamata seguente 
     // vale 5.
     x += 1;
}

// chiamata
myFunc(5);

Questo porta a dire che una variabile ha una lifetime, cioè un periodo di vita più o meno lungo.
Le variabili globali hanno un periodo di vita lungo quanto è lunga la vita del programma.
Le variabili locali hanno un periodo di vita più breve rispetto alle variabili globali. Il periodo di vita è determinato
dal blocco {}. Un code block è una entità che può esistere anche non legata ad una istruzione C o ad una funzione.

void myFunc() 
{
      int i = 0;
      {     //  questo è un code block non legato ad alcuna funzione o istruzione
            int h = 1;
      }
     // int h qui non è più visibile perché non esiste più e posso dichiararla un altra volta.
     int h = 5;
}

Ciao.