Newsgroup: it.comp.lang.c
Titolo: Variabili globali

Salve a tutti.
Sui due manuali di C che uso c'è scritto che è preferibile non utilizzare le 
variabili globali, ma non ho ben capito il perchè. Apparentemente 
sembrerebbe utile dichiarare una variabile globale se la si utilizza in 
diverse funzioni.
Vi prego di illuminarmi.
-- 
        Happy hacking,
        Gioco
Per inviarmi un' email cancella il 10.

 utilizzare le variabili globali, ma non ho ben capito il perchè.
La regola e semplice: le variabili dovrebbero avere la minima visibilità
possibile e necessaria. Questo perchè più le variabili sono visibili in
contesti diversi, più il singolo contesto deve tenerne conto onde evitare
side effects. Una variabile globale è modificabile in qualsiasi funzione
del programma e questo se non è necessario andrebbe evitato.

 variabili globali, ma non ho ben capito il perchè.
Fondamentalmente, perche` piu` vengono usate, piu` diminuisce la 
leggibilita` del codice, in quanto il risultato di una funzione non 
dipende piu` solo dai suoi parametri, ma anche dal valore delle 
variabili globali che usa.
In pratica le globali diventano dei "parametri occulti", dei quali non 
e` evidente l'uso (per vedere che parametri usa una funzione e cosa 
ritorna basta guardarne la dichiarazione, mentre se  usa delle globali 
occorre scorrere tutto il corpo della definizione).
Inoltre non e` sempre facile determinare quale dovrebbe essere il valore 
di un certo insieme di variabili globali in una data circostanza (mentre 
e` un po' piu` facile guardare i parametri passati ad una funzione), per 
cui una serie di funzioni che fanno uso di variabili globali diventa 
anche piu` difficile da testare.
Detto questo: ci sono perche` in alcuni casi semplificano di molto la 
stesura del codice, e quindi in tali casi sarebbe sciocco non usarle 
(come anche l'uso del goto in C per sopperire ad alcuni limiti del 
linguaggio).
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

 diverse funzioni.
Chiediti sempre: come posso farne a meno? C'e' un modo piu' pulito ed
elegante per farlo?
Raramente la risposta sara' "no".
Errno per esempio e' globale... la usa tutta la libreria standard per
trasmettere i messaggi di errore.
Funziona perche' tutta la libreria "conosce" questa variabile e sa come si
usa e tutti i programmatori sanno che esiste e come possono usarla.
In questo caso e' comodo perche' e' un modo facile e veloce per condividere
un'informazione attraverso tutta la libreria standard (e le varie
estensioni).
In un tuo progetto di medie dimensioni c'e' sempre un modo per farne a meno,
passando un parametro in piu' o incapsulare le informazioni in una
struttura dati passata per riferimento.
Stesso discorso per il goto (come ti e' stato detto)... c'e' sempre modo di
farne a meno, ma se hai 4 cicli annidati, se dal ciclo piu' interno vuoi
interrompere tutti gli altri cicli, il goto e' la soluzione piu' chiara.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."