vengono usati per scambiare dati (attraverso buffer o strutture) e le
variabili semplici vengono usate per specificare parametri; in genere le
informazioni a riguardo dei risultati vengono passate alla routine chiamante
-attraverso il valore di ritorno. Talvolta però è necessario che la funzione
-possa restituire indietro alla funzione chiamate un valore relativo ad uno dei
-suoi parametri. Per far questo si usa il cosiddetto \textit{}. Pertanto occorre
-tenere conto che quando si vuole restituire un risultato alla funzione
-chiamante occorre usare un puntatore.
+attraverso il valore di ritorno. È buona norma seguire questa pratica anche
+nella programmazione normale.
+Talvolta però è necessario che la funzione possa restituire indietro alla
+funzione chiamante un valore relativo ad uno dei suoi parametri. Per far
+questo si usa il cosiddetto \textit{value result argument}, si passa cioè,
+invece di una normale variabile un puntatore; vedremo alcuni esempi di questa
+modalità nelle funzioni che gestiscono i socket (in
+\secref{sec:TCPel_functions}) in cui, per permettere al kernel di restituire
+informazioni sulle dimensioni delle strutture degli indirizzi utilizzate,
+viene usato questo meccanismo.
+
\subsection{Potenziali problemi con le variabili automatiche}
\label{sec:proc_auto_var}
-
+Uno dei possibili problemi che si possono avere con le subroutine è quello di
+restituire alla funzione chiamante dei dati che sono contenuti in una
+variabile automatica. Ovviamente quando la subroutine ritorna la sezione
+dello stack che conteneva la variabile automatica potrà essere riutilizzata da
+una nuova funzione, con le conseguenze immaginabili di sovrapposizione.
+
+Per questo una delle regole fondamentali della programmazione in C è che
+all'uscita di una funzione non deve restare nessun riferimento a variabili
+locali di quella funzione; qualora necessiti di utilizzare variabili che
+possano essere viste anche dalla funzione chiamante queste devono essere
+allocate esplicitamente, o in maniera statica (usando variabili di tipo
+\type{static} o \type{extern}), o dinamicamente con una delle funzioni della
+famiglia \func{malloc}.
\subsection{Il controllo di flusso non locale}
\label{sec:proc_longjmp}