\label{sec:proc_conclusion}
Normalmente un programma finisce è quando la funzione \func{main} ritorna, una
-modalità equivalente di concludere il programma è quella di chiamare
+modalità equivalente di chiudere il programma è quella di chiamare
direttamente la funzione \func{exit} (che viene comunque chiamata
automaticamente quando \func{main} ritorna). Una forma alternativa è quella
di chiamare direttamente la system call \func{\_exit}, che restituisce il
Il valore di ritorno della funzione \func{main}, o quello usato nelle chiamate
ad \func{exit} e \func{\_exit}, viene chiamato \textsl{stato di uscita} (o
-\textit{exit status}) e passato al processo padre che aveva lanciato il
-programma (in genere la shell). In generale si usa questo valore per fornire
+\textit{exit status}) e passato al processo che aveva lanciato il programma
+(in genere la shell). In generale si usa questo valore per fornire
informazioni sulla riuscita o il fallimento del programma; l'informazione è
necessariamente generica, ed il valore deve essere compreso fra 0 e 255.
\end{itemize*}
Il problema più comune e più difficile da risolvere che si incontra con le
-routines di allocazione è quando non viene opportunamente liberata la memoria
+routine di allocazione è quando non viene opportunamente liberata la memoria
non più utilizzata, quello che in inglese viene chiamato \textit{memory-leak},
(cioè \textsl{perdita di memoria}).
automaticamente al ritorno della funzione.
Come è evidente questa funzione ha molti vantaggi, anzitutto permette di
-evitare alla readice i problemi di memory leak, dato che non serve più la
+evitare alla radice i problemi di memory leak, dato che non serve più la
deallocazione esplicita; inoltre la deallocazione automatica funziona anche
quando si usa \func{longjmp} per uscire da una subroutine con un salto non
locale da una funzione (vedi \secref{sec:proc_longjmp}).
Oltre al passaggio dei parametri, un'altra modalità che permette di passare
delle informazioni che modifichino il comportamento di un programma è quello
dell'uso del cosiddetto \textit{environment} (cioè l'uso delle
-\textsl{varibili di ambiente}). In questa sezione esamineremo le funzioni che
+\textsl{variabili di ambiente}). In questa sezione esamineremo le funzioni che
permettono di gestire parametri e opzioni, e quelle che consentono di
-manipolare ed utilizzare le varibili di ambiente.
+manipolare ed utilizzare le variabili di ambiente.
\subsection{Il formato dei parametri}
\var{argv} le librerie standard del C forniscono la funzione \func{getopt}
che ha il seguente prototipo:
\begin{prototype}{unistd.h}
-{int getopt(int argc, char * const argv[], const char * optstring)}
+{int getopt(int argc, char *const argv[], const char *optstring)}
Esegue il parsing degli argomenti passati da linea di comando
riconoscendo le possibili opzioni segnalate con \var{optstring}.
eseguire la copia di un puntatore alla lista degli argomenti:
\begin{prototype}{stdarg.h}{void va\_copy(va\_list dest, va\_list src)}
Copia l'attuale valore \param{src} del puntatore alla lista degli argomenti
- su \param{desc}.
+ su \param{dest}.
\end{prototype}
\noindent anche in questo caso è buona norma chiudere ogni esecuzione di una
\macro{va\_copy} con una corrispondente \macro{va\_end} sul nuovo puntatore
che siano fissi sia che siano opzionali (alcuni sistemi trattano diversamente
gli opzionali), ma dato che il prototipo non può specificare il tipo degli
argomenti opzionali, questi verranno sempre promossi, pertanto nella ricezione
-dei medesimi ocoorrerà tenerne conto (ad esempio un \type{char} verrà visto da
+dei medesimi occorrerà tenerne conto (ad esempio un \type{char} verrà visto da
\macro{va\_arg} come \type{int}).
Per questo una delle regole fondamentali della programmazione in C è che
all'uscita di una funzione non deve restare nessun riferimento alle variabili
-locali; qualora sia necessirio utilizzare variabili che possano essere viste
+locali; qualora sia necessario 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}.